次のモデルがあるとします。
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' は無効です。指定する列数は、主キー列の数と一致する必要があります