实体框架代码是否首先支持只读导航属性

时间:2012-04-22 12:48:48

标签: entity-framework properties navigation code-first readonly

目前我首先使用Entity Framework代码来创建我的域模型。如下面的代码所示,我想在“Test2”类和“Test1”类之间创建一对多关联。但是当我运行应用程序时,它引发了一个异常:

  

导航属性“T2”不是类型的声明属性   “测试1”。验证它是否未被明确排除   模型,它是一个有效的导航属性。

如果我修改导航属性“T2”以使其具有“受保护”或公共设置器。没关系。因此,似乎Entity框架不支持只读导航属性。谁能解释一下这个问题的链接?

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 个答案:

答案 0 :(得分:1)

这可能是代码中的一些小的限制,它不是由私有的setter引起的,而是由基类中的私有setter和派生类的映射引起的。如果您将T2声明从Test1Base移至Test1,它将适用于私人设定者,但如果您想将其保留在Test1Base中,请将设定者保护。