Укажите столбец MAXLENGHTEN на столбце JSON в EF CoreC#

Место общения программистов C#
Ответить
Anonymous
 Укажите столбец MAXLENGHTEN на столбце JSON в EF Core

Сообщение Anonymous »

У меня есть два класса, которые представляют таблицы в моей базе данных: < /p>

Код: Выделить всё

public class Parent
{
public Child Child { get; set; }
}

public class Child
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
}
У меня также есть этот dbcontext class

Код: Выделить всё

public class SomeContext : DbContext
{
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity
().OwnsOne(x => x.Child, y => y.ToJson());
base.OnModelCreating(modelBuilder);
}
}
< /code>
Когда я запускаю < /p>
dotnet ef migrations add SomeContext_Initial
< /code>
EF Core генерирует миграцию что -то вроде этого: < /p>
...
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Parent",
columns: table => new
{
Child = table.Column(type: "nvarchar(max)", nullable: false)
}
}
...
}
< /code>
Я использую SQL Server в качестве моей базы данных. Насколько я знаю, SQL Server автоматически перемещает Child 
столбец на страницы в блоке распределения ROW_OVERFLOW_DATA, потому что в столбце Code Type Type Nvarchar (MAX) , даже если содержимое столбца значительно меньше, чем 8060 байтов (макс).

Код: Выделить всё

PropertyA
и Propertyb Длина данных в сумме, как ожидается, составит около 1000 в сериализованной форме).
Это то, что я явно не хочу по соображениям производительности.
Даже если я указываю длину Propertya и Propertyb , инструмент миграции все еще генерирует дочерний код nvarchar (max) .
Я попытался указать длину столбца с использованием .hasannotation ("maxlength", 1000) (или с использованием атрибута [maxlength (1000)] на дочернем свойство) и у которого не было эффекта. Это также не имело никакого эффекта
Есть ли способ достичь длины столбца, отличной от nvarchar (max) , за исключением редактирования файла миграции вручную?

Подробнее здесь: https://stackoverflow.com/questions/775 ... in-ef-core
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»