0

簡潔にするために要約した次のセットアップがあります。

public abstract class AuditableEntity
{
    public int Id { get; set; }
    public Login Login { get; set; }  // Login that create this identity.
}

public class Login: AuditableEntity
{
    public Security Security { get; set; }
    public Guid SessionGuid { get; set; }
}

public class Security: AuditableEntity
{
    public string UserName { get; set; }
    public string PasswordHash { get; set; }
}

現在は、エンティティ自体Loginには必要ありません。Login実際、それはそのテーブルに属していないため、次のように無視します。

modelBuilder.Entity<Login>().Ignore(l => l.Login);

他のすべてのテーブルで必須にしたいのですが、たとえば、必須にしようとするとUser:

modelBuilder.Entity<Security.Security>().Property(p => p.Login).IsRequired();

コンパイル エラーが表示されます。以前の呼び出しでパラメーター 'T' として使用することが許可されていることに注意してくださいIgnore。したがって、これは他の非表示の T であると想定しています。

私のすぐにわかる解決策はあまりエレガントではありません。

  1. Logininの参照プロパティではなく、FK 値を使用しAuditableEntityます。
  2. なしで新しい基本クラスを作成し、Loginそこから派生して を追加Loginし、最上位の基本から Login クラスを継承し、その直下の子孫から他のすべてのクラスを継承します。

これを行うためのより良い方法はありますか?

4

1 に答える 1

1

ネイティブSQLプロパティにプロパティ構文を使用しています。あなたは実際に.HasRequired(t=>t.Login).WithMany()または同様のもののようなNavプロパティ構文を使用したい

http://msdn.microsoft.com/en-us/library/hh295843(v=vs.103).aspx、および「1つのナビゲーションプロパティとの関係の構成」セクションを参照してください。

于 2012-04-22T05:55:55.283 に答える