1

给定这个类:

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.

4

1 回答 1

1

好的,经过反复试验,事实证明 EF 实际上并没有考虑天气,或者我的复杂类型属性不是私有的。它只需要知道该类型存在,因此正如 Gert Arnold 在评论中所写,这样做modelBuilder.ComplexType<Address>()实际上会导致 EF 将所有 Address 属性读/写到数据库中,即使它们是私有的。

我还发现Property(b => b.Address.Street);会做同样的事情。它将注册整个Address类型,而不仅仅是Street部分,它会为所有属性注册它。因此,即使我的篮子里同时有 aBillingShippingaddress,它们都会被 EF 选中。

于 2018-01-17T18:06:29.237 回答