2012-04-22 94 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

相关问题