1

ほぼすべてのエンティティに共通のプロパティ(CreatedBy、CreatedOn、UpdatedBy、UpdatedOn)があります。これらのプロパティを持つBaseEntityを作成してから、他のすべてのエンティティにこのプロパティを継承させることにしました。

例えば:

BaseEntity->質問

BaseEntity->回答

モデルコンテナから質問をロードするにはどうすればよいですか?

db.Questionsないか、これ以上ありませんdb.Answers。ただdb.BaseEntities

具体的には、すべての質問を主題別にロードしたいので、通常はと言いdb.Questions.Where(q => q.Subject.Id.Equals(subjectId))ます。

今これを行うにはどうすればよいですか?

どうもありがとう、ピート

4

2 に答える 2

1

このために基本クラスを使用しないでください。

最終的に1つのエンティティが設定され、typeof(X)を使用する必要があります。

何よりも悪いことに、これは他のエンティティの将来の継承を壊す可能性があります。特に、一部がタイプごとのテーブルであり、一部が階層ごとのテーブルであり、一部が2つの混合である場合です。

代わりに、部分クラスを使用して、アスペクトプロパティ(CreatedBy、CreatedOn、UpdatedBy、UpdatedOn)を持つ共通のインターフェイスを定義します。

編集:ベースエンティティには、すべてのエンティティのPKを含むテーブルも必要です。これにより、テーブルが不必要に大きくなり、クエリおよび挿入中にパフォーマンスが低下する可能性があります。

于 2012-06-10T12:25:39.880 に答える
1

まず、データベースの構成に使用できる継承マッピング戦略には複数の種類があります

DbContextに具象型のセットを追加することもできます

public class MyDbContext : DbContext
{
     public DbSet<Question> Questions { get; set; }
     public DbSet<Answer> Answers { get; set; }
}

そして最も重要なこと-私はあなたの代わりに継承よりも構成を好むでしょう。これはより自然に感じます

public class HistoryRecord
{
    public User CreatedBy { get; set; }
    public User UpdatedBy { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime UpdatedOn { get; set; }
}

質問、回答などの中で複合型として使用します

public class Question
{
     public HistoryRecord HistoryRecord { get; set; }
}
于 2012-06-10T12:25:53.307 に答える