如何用MVC3忽略内部实体属性
本文关键字:内部 实体 属性 何用 MVC3 | 更新日期: 2023-09-27 18:13:31
我有一个具有复杂类型Address
的Member
实体,具有复杂类型UsState
,具有以下属性:Id
, Name
和Iso
。
我需要映射成员地址的UsState
到它的DB表列。问题是members
表只包含State (VARCHAR)
列,所以为了执行正确的映射,我这样做:
modelBuilder.Entity<Member>().Property(p => p.BillingAddress.State.Name).HasColumnName("State");
modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Id);
modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Iso);
但似乎Ignore
只接受基本属性lambdas,所以我收到了这个:
The expression 'p => p.BillingAddress.State.IsoCode' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'.
如何解决这个问题?(最好使用Ignore
方法)
创建UsState
的子类
public class UsStateSpecific : UsState
{
}
然后将BillingAddress
的type中State
属性的type改为UsStateSpecific
public class Address
{
...
public UsStateSpecific State
...
}
现在忽略所有复杂类型(或实体)UsStateSpecific
所需的属性。这不会影响其他类型的UsState
属性。
modelBuilder.ComplexType<UsStateSpecific>().Ignore(p => p.Id);
modelBuilder.ComplexType<UsStateSpecific>().Ignore(p => p.Iso);
尝试添加:
modelBuilder.Entity<UsState>().Ignore(p => p.Id);
modelBuilder.Entity<UsState>().Ignore(p => p.Iso);
并删除此:
modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Id);
modelBuilder.Entity<Member>().Ignore(p => p.BillingAddress.State.Iso);