目前我使用Entity Framework Code First来创建我的领域模型。如下面的代码所示,我想在“Test2”类和“Test1”类之间创建一对多的关联。但是当我运行应用程序时,它抛出了一个异常:
“ T2 ”导航属性不是类型 “Test1” 上的已声明属性。请验证它没有被显式地从模型中排除,并且它是一个有效的导航属性。
如果我将导航属性“T2”修改为具有“protected”或公共setter,则可以正常工作。因此,似乎Entity Framework不支持只读导航属性。有人能解释一下并给一些关于这个问题的链接吗?
“ T2 ”导航属性不是类型 “Test1” 上的已声明属性。请验证它没有被显式地从模型中排除,并且它是一个有效的导航属性。
如果我将导航属性“T2”修改为具有“protected”或公共setter,则可以正常工作。因此,似乎Entity Framework不支持只读导航属性。有人能解释一下并给一些关于这个问题的链接吗?
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();
}
}