4

現在、最初に Entity Framework コードを使用してドメイン モデルを作成しています。以下のコードが示すように、"Test2" クラスと "Test1" クラスの間に 1 対多の関連付けを作成します。しかし、アプリケーションを実行すると、例外がスローされました。

ナビゲーション プロパティ '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();
    }
}
4

1 に答える 1

1

これはおそらく、プライベート セッターではなく、基本クラスのプライベート セッターと派生クラスのマッピングによって引き起こされる、最初のコードのマイナーな制限です。T2宣言を からTest1Baseに移動するTest1と、プライベート セッターで動作しますが、そのままにしておく場合はTest1Base、セッターを保護します。

于 2012-04-22T13:12:24.503 に答える