0

.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 を使用して設定することはできますか? 私はこれまでに何十回も試みましたが、運がありませんでした。

4

1 に答える 1

0

modelBuilder.Entity<Lookup>()EF は、2 つのサブクラスをマップする構成が「好き」ではないと思います。これは役立つはずです:

modelBuilder.Entity<Game>()
  .Map(l => l.Requires("LookupType").HasValue("Game"));
modelBuilder.Entity<SetType>()
  .Map(l => l.Requires("LookupType").HasValue("Set Type"));
于 2012-12-23T15:39:06.787 に答える