2012-04-22 88 views
3

目前我首先使用實體​​框架代碼創建我的域模型。如下面的代碼所示,我想創建「Test2」類和「Test1」類之間的一對多關聯。但是當我運行應用程序時,它拋出一個異常:實體框架代碼是否第一次支持只讀導航屬性

導航屬性'T2'不是類型爲 'Test1'的聲明屬性。驗證它是否未被明確地從 模型中排除,並且它是有效的導航屬性。

如果我修改導航屬性「T2」使其具有「受保護」或公共設置者。沒關係。所以看起來實體框架不支持只讀導航屬性。任何人都可以解釋並給出這個問題的一些鏈接?

public abstract class Test1Base 
{ 
    public int Id {get; set} 
    public virtual Test2 T2 {get; private set;} 
} 

public class Test1 : Test1Base 
{ 

} 

public class Test2 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
} 

public class MyDbContext : DbContext 
{ 
    public DbSet<Test1> Test1Table {get; set;} 
    public DbSet<Test2> Test2Table {get; set;} 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<Test1>().HasRequired(t => t.T2).WithMany(); 
    } 
} 

回答

1

它可能是未由私人設定器,而是由在派生類的基類和映射的私人設定器引起代碼稍作限制第一。如果您將T2聲明從Test1Base移至Test1,它將與私人設定器一起使用,但如果您想將其保留在Test1Base中,則可以保護setter。

+0

是的。我必須讓派生類在派生類中可見。 – user1012036 2012-04-22 14:52:35

+0

我們已經有了這方面的bug,直到EF5發佈之後纔會得到修復。我會跟進並確保它被該錯誤所覆蓋,或者根據需要提交新的錯誤。 – 2012-04-22 16:41:12

相關問題