EF автоматически распознает сложные типы (объекты-значения), вам не нужно добавлять беглые отображения API.
Я даю вам пример из этого курса, Джули Лерман
Address
- это ValueObject:
public class Address
{
public string Street { get; private set; }
public string City { get; private set; }
public string StateProvince { get; private set; }
public string PostalCode { get; private set; }
}
SalesOrder
- это наша сущность, которая использует Address
сложный тип.
public class SalesOrder
{
public int SalesOrderId { get; private set; }
public DateTime OrderDate { get; private set; }
public DateTime? DueDate { get; private set; }
public string PurchaseOrderNumber { get; private set; }
public string Comment { get; private set; }
public Address ShippingAddress { get; private set; }
}
Теперь, если высначала используйте код EF для построения таблиц БД, вот что вы получите (код миграции):
CreateTable("SalesOrder", c => new
{
SalesOrderId = c.Int(nullable: false),
OrderDate = c.DateTime(nullable: false),
DueDate = c.DateTime(),
PurchaseOrderNumber = c.String(),
Comment = c.String(),
ShippingAddress_Street = c.String(),
ShippingAddress_City = c.String(),
ShippingAddress_StateProvince = c.String(),
ShippingAddress_PostalCode = c.String(),
})
.PrimaryKey(t => t.SalesOrderId);
Обратите внимание, что EF непосредственно добавил все поля адреса в таблицу.
Выне требуется никаких дополнительных отображений API, позволяющих платформе сущностей добавлять Address
поля в таблицу, приведенное выше поведение по умолчанию.
Вот как выглядит DbContext
:
public class OrderContext: DbContext
{
public OrderContext() : base("connectionStringName") { }
DbSet<SalesOrder> Orders { get; set; }
}