鉴于此课程:
public class Basket
{
public int Id { get; set; }
private string SomeProperty { get; set; }
private Address Address { get; set; }
public class BasketMapper : EntityTypeConfiguration<Basket>
{
public BasketMapper()
{
//ValueType property is simple
Property(b => b.SomeProperty);
//Complex type needs all properties mapped
Property(b => b.Address.Street);
Property(b => b.Address.City);
Property(b => b.Address.CountryCode);
}
}
}
我希望我的Address
属性保持私有,但我不能使用Property(b=>b.Address)
,因为不支持类。
有没有一种简单的方法可以告诉EF将我的Address
属性映射为复杂类型,就像它是一个公共属性一样?
我想避免的是必须将地址的所有属性添加到我的BasketMapper
。
答案 0 :(得分:1)
好的,经过一些反复试验后发现EF实际上并没有考虑天气,我的复杂类型属性是私有的。它只需要知道类型存在,正如Gert Arnold在评论中写道的那样,执行modelBuilder.ComplexType<Address>()
实际上会导致EF读取/写入数据库的所有地址属性,即使它们是私有的。
我还发现Property(b => b.Address.Street);
将完全相同。它将注册整个Address
类型,而不仅仅是Street
部分,它会将其注册为alle属性。因此,即使我的购物篮中同时包含Billing
和Shipping
地址,它们也会被EF接收。