.Net 4.5 を対象とする Entity Framework 5 を使用しています。私の人生では、階層ごとのテーブルとナビゲーション列を操作しようとしているときに、次のエラーを引き起こしている何が間違っているのかわかりません。
列名 'Game_Category' が無効です。
列名 'Game_Value' が無効です。
列名 'Type_Category' が無効です。
列名 'Type_Value' が無効です。
抽象基本クラスは次のとおりです (カテゴリと値の複合 PK に注意してください)。
[Table("Dictionary")]
public abstract class Lookup
{
[Key, Column(Order = 0)]
[StringLength(50)]
public string Category { get; set; }
[StringLength(100)]
public string ExtendedValue { get; set; }
[Required]
public bool IsActive { get; set; }
[Required]
[StringLength(50)]
public string Key { get; set; }
[Key, Column(Order = 1)]
public int Value { get; set; }
}
追加の列を追加しない 2 つのサブクラスが続きます...
public class Game : Lookup {}
public class SetType : Lookup {}
Game および SetType への Navigation プロパティを持つクラスを次に示します...
public class CardSet
{
[Required]
[StringLength(10)]
public string Abbreviation { get; set; }
public virtual Game Game { get; set; }
[Required]
public int GameId { get; set; }
[Key]
public int Id { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
public DateTime ReleaseDate { get; set; }
public virtual Lookup Type { get; set; }
[Required]
public int TypeId { get; set; }
}
私のデータコンテキストから...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Lookup>()
.Map<Game>(l => l.Requires("LookupType").HasValue("Game"))
.Map<SetType>(l => l.Requires("LookupType").HasValue("Set Type"));
base.OnModelCreating(modelBuilder);
}
ルックアップ テーブルには、LookupType という名前の識別子列があります。テーブル/継承に関するいくつかのチュートリアルを読みました。他の 2 つ - 同様に構築されたオブジェクトを使用する TPT と TPC は簡単でした。上記のエラーは理解していますが、慣例により FK 列を探していることは理解していますが、何が間違っているか、または欠落していて、それらの列を探す原因になっているのかわかりません。GameId および TypeId プロパティに ForeignKey 属性を配置しようとしましたが、従属/主関係の制約に関するエラーが発生し、カテゴリを追加の外部キーとして指定する方法がわかりません。
ナビゲーション プロパティを使用しているときに、テーブル/継承に関するチュートリアルをまだ見つけていません。どんな助けでも大歓迎です.これは私を1時間以上夢中にさせています.
アップデート:
問題は、キーの一部としてのカテゴリの使用にあると思います。CardSet には、そのルックアップの「ゲーム」のカテゴリまたはそのルックアップの「セット タイプ」のカテゴリの 2 つのプロパティがありません。これらのプロパティを作成しようとしましたが、うまくいきませんでした。Fluent API を使用して設定することはできますか? 私はこれまでに何十回も試みましたが、運がありませんでした。