2011-11-03 60 views
1

我有一個Member實體,它具有複雜類型Address,其複雜類型稱爲UsState,它具有以下屬性:Id,NameIso如何用MVC3忽略內部實體屬性?

我需要將成員地址的UsState映射到它的數據庫表列。問題是,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只接受基礎屬性的lambda表達式,所以我收到這樣的:

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方法)

+0

這與MVC無關。 – Dismissile

回答

2

創建的UsState

public class UsStateSpecific : UsState 
{ 
} 

一個sublcass然後改變的類型屬性BillingAddress的類型爲UsStateSpecific

public class Address 
{ 
... 
public UsStateSpecific State 
... 
} 

現在忽略來自複雜類型(或實體)UsStateSpecific所有期望的性質。這不會影響其他類型的其他UsState屬性。

modelBuilder.ComplexType<UsStateSpecific>().Ignore(p => p.Id); 
modelBuilder.ComplexType<UsStateSpecific>().Ignore(p => p.Iso); 
0

嘗試添加此:

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); 
+0

但是,如果我使用'modelBuilder.Entity ().Ignore(p => p.Id);'是否會影響所有其他'UsState'實例?我只想忽略Member-> Address-> State-> Id。 –