在Entity Framework中将私有属性映射为复杂类型

时间:2018-01-17 12:47:30

标签: entity-framework fluent-entity-framework

鉴于此课程:

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

1 个答案:

答案 0 :(得分:1)

好的,经过一些反复试验后发现EF实际上并没有考虑天气,我的复杂类型属性是私有的。它只需要知道类型存在,正如Gert Arnold在评论中写道的那样,执行modelBuilder.ComplexType<Address>()实际上会导致EF读取/写入数据库的所有地址属性,即使它们是私有的。

我还发现Property(b => b.Address.Street);将完全相同。它将注册整个Address类型,而不仅仅是Street部分,它会将其注册为alle属性。因此,即使我的购物篮中同时包含BillingShipping地址,它们也会被EF接收。