EF Core: как сделать требуемой собственную коллекцию? ⇐ C#

Место общения программистов C#
Anonymous
EF Core: как сделать требуемой собственную коллекцию?

Сообщение Anonymous »

У меня есть следующие объекты:

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

public class Cart
{
public required Guid Id { get; init; }
public required List Products { get; init; }
}

public class CartProduct
{
public required Guid ProductId { get; init; }
public required int Quantity { get; set; }
}
Я настраиваю объект «Корзина» следующим образом:

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

public class CartEntityTypeConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder cartEntity)
{
cartEntity.ToTable("carts");

cartEntity
.HasKey(cart => cart.Id)
.HasName("pk_carts");

cartEntity
.Property(cart => cart.Id)
.HasColumnName("id");

cartEntity.OwnsMany(
cart => cart.Products,
products => products.ToJson("products")
);
}
}
Но в результате свойство "products" считается обнуляемым.
Вот фрагмент кода из созданной миграции:

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

migrationBuilder.CreateTable(
name: "carts",
columns: table => new
{
id = table.Column(type: "uuid", nullable: false),
products = table.Column(type: "jsonb", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_carts", x => x.id);
}
);
Обратите внимание, что столбец Products помечен значением nullable: true.
Я попробовал следующие два варианта. :

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

cartEntity.OwnsMany(
cart => cart.Products,
products => products.ToJson("products")
);

cartEntity
.Navigation(cart => cart.Products)
.IsRequired();
и

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

cartEntity
.OwnsMany(
cart => cart.Products,
products => products.ToJson("products")
)
.Navigation(cart => cart.Products)
.IsRequired();
Но при обоих подходах я получаю одну и ту же ошибку:

Невозможно создать «DbContext» типа ''. Исключение «Cart.Products» невозможно настроить должным образом, поскольку оно было настроено как коллекция. был выброшен при попытке создать экземпляр. Информацию о различных шаблонах, поддерживаемых во время разработки, см. на странице https://go.microsoft.com/fwlink/?linkid=851728

Есть ли способ сделать это свойство не обнуляемым?
PS: да, я мог бы просто пойти и отредактировать созданную миграцию, но мне бы хотелось иметь возможность настроить это с помощью Fluent API.

Подробнее здесь: https://stackoverflow.com/questions/788 ... n-required

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