1

次のモデルがあるとします。

public class Item
{
  public int Id { get; set; }
  public ICollection<File> Attachments { get; set; }
}

public class File
{
  public int Id { get; set; }
  public ObjectType ObjectType { get; set; } // enum stored as INT
  public int ObjectId { get; set; }
}

Item.Attachments次のように、結果の SQL が正しく結合されるように、Fluent API を使用してナビゲーション プロパティをどのように記述すればよいでしょうか。

SELECT ... FROM Items a 
LEFT JOIN Files b
  ON a.Id = b.ObjectId AND b.ObjectType = 8 (example enum value)

Item.ObjectTypeプロパティを公開しItem.ObjectIdてから、Item マップで次のことを試しました。

HasMany(x => x.Attachments)
  .WithOptional()
  .Map(x => x.MapKey("ObjectType", "ObjectId"))
  .WillCascadeOnDelete(false);

しかし、これはおそらくデータベース内の実際の外部キーではないため、次の実行時エラーが発生します。

指定された関連付け外部キー列 'ObjectType、ObjectId' は無効です。指定する列数は、主キー列の数と一致する必要があります

4

1 に答える 1

0

との間の関係は有効な参照制約Itemではないため、これはコードファーストマッピングではサポートされていません。FileEFコードは、最初に外部キー制約と同等のマッピングのみをサポートします=>依存テーブルの外部キーの列は、主テーブルのプライマリの列と一致する必要があります。あなたのケースでは、従属テーブルに追加の定数列が必要です。

于 2013-01-13T12:41:47.617 に答える