如何用MVC3忽略内部实体属性

本文关键字:内部 实体 属性 何用 MVC3 | 更新日期: 2023-09-27 18:13:31

我有一个具有复杂类型AddressMember实体,具有复杂类型UsState,具有以下属性:Id, NameIso

我需要映射成员地址的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方法)

如何用MVC3忽略内部实体属性

创建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);