私は簡潔にするために簡略次のセットアップを持っている:今コードファーストフルーエントマッピングで継承プロパティを必要とする方法はありますか?
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』としてそれを使用するために非NULL可能値型でなければなりません」。すぐに明らかに解決策は非常にエレガントではありません私は私が前にIgnore
呼び出しでパラメーター「T」としてそれを使用させて頂くことに注意してくださいので、私は、これは他のいくつかの、隠されたT.
私であると仮定します。
Login
には、AuditableEntity
のFK値を使用し、参照先は使用しないでください。Login
を付けずに新しい基本クラスを作成し、もう1つはLogin
を追加し、ログインクラスを最高基底から継承し、他のすべてのクラスを直系子孫から継承します。
これを行うにはいくつかの方法がありますか?
おかげとの関係を設定します。このシナリオの継承のように私のような初心者のために少し難しいかもしれないので、私はすべてのエンティティに 'IAuditableEntity'を実装するつもりですが、それらに独自のプロパティ宣言を与えます。 – ProfK