既存のスキーマへのコード最初のアプローチで、標準的な型ごとのテーブル継承のケースがあります。
[Table("base_object")]
public partial class BaseObject
{
public BaseObject()
{
}
[Key]
[Column("id")]
public long Id {get; set;}
[Column("slug")]
public string Slug {get; set;}
...
}
[Table("user")]
public partial class User: BaseObject
{
public User()
{
}
[Column("login")]
public string Login {get; set;}
[Column("email")]
public string Email {get; set;}
}
注釈で説明されているように、マッピングは簡単です。user.id は主キーであり、base_object.id への外部キーです。
テスト ケースでは、Context から "Users" リポジトリへの最初の呼び出し中に、EF がクエリを生成しています。
SELECT
1 AS [C1],
'0X0X' AS [C2],
[Extent1].[id] AS [id],
[Extent2].[slug] AS [slug],
[Extent1].[login] AS [login],
[Extent1].[email] AS [email],
[Extent1].[BaseObject_id] AS [BaseObject_id]
FROM [dbo].[user] AS [Extent1]
INNER JOIN [dbo].[base_object] AS [Extent2] ON [Extent1].[id] = [Extent2].[id]
列「user.BaseObject_id」が存在しないため、エラーが発生します。この行がない場合: *[Extent1].[BaseObject_id] AS [BaseObject_id]* クエリは問題ありません。
私は何を間違っていますか?
.NET 4.0 で EF5.0 を使用しています