と という名前の 2 つのクラスがText
ありImage
、どちらも抽象クラス から継承していItem
ます。これを.edmx
ファイルにマッピングし、そこからデータベースを生成しました。
Text
現在、データベースからまたはを取得しようとするたびImage
に、次の例外に直面しています。
There are no EntitySets defined for the specified entity type 'ModelLibrary.Text'.
If 'ModelLibrary.Text' is a derived type, use the base type instead.
Parameter name: TEntity
クラスは抽象クラスであり、またはクラスItem
に関連付けられた情報が含まれていないため、クラスにアクセスしたり保存したりできません。Text
Image
データにアクセスしようとするために使用しているコード:
ProjectEntities context = new ProjectEntities(); //this inherits from ObjectContext and was generated by EF
var textRepo = new TextRepository(context);
var lstTexts = textRepo.GetAll();
foreach (var i in lstTexts)
{
Console.WriteLine(i.textTitle);
}
このtextRepo
クラスは、データベースへのアクセスと保存に使用されます。textRepo
継承元のクラスのコンストラクターで例外が発生します(DataRepository)
。
protected DataRepository(ObjectContext context)
{
Context = context;
ObjectSet = Context.CreateObjectSet<T>();
}
私はすでに例外についていくつかの調査を行っており、次の質問を見つけました: EF4 - カスタム ObjectContext と継承の質問
質問に対する答えは、実際にはすでに起こるはずのことです (特定のタイプの ObjectSet の作成)。例外を防ぐはずの行で例外が発生したようです。
今、何がうまくいかないのか、何が欠けているのかを知りたいです。継承のために何か特別なことをする必要がありますか? 私は Entity Framework に少し慣れていないので、ここで明らかな間違いを犯していたら申し訳ありません。さらに詳しい情報やコードが必要な場合は、お気軽にお問い合わせください。
編集:例外をより具体的にするために、私はそれをObjectSet = Context.CreateObjectSet<T>();
行に入れます。textRepo
クラスの基底クラス、つまりクラスのコンストラクターで既に例外を取得しているため、テスト コードに多くを追加することはできませんDataRepository
。