すべての標準フィールドに基本モデルを使用しようとしていますが、LocationIssueModelやPersonIssueModelなどの他のモデルは異なるプロパティを持ちます。テーブル構造は、location_issueに必要なフィールドが存在する場合と同じです。person_issueには必要なフィールドがあり、メインのissueテーブルは共通フィールドに使用されます。 location_issueとperson_issueの両方に、issueテーブルのissue_kyに対するFKであるPKがあります。継承モデルを使用したエンティティ分割
以下の設定を使用して、IssueModel1でLinqクエリとエラーを実行しようとしています。
この設定は正しいですか?
編集:IsActiveLocationフラグエンティティ分割を使用してインターフェイスのためには
モデル
public class IssueModel
{
public int Key { get; set; }
public string RequestNumber { get; set; }
public bool IsActiveLocation { get; set; }
}
public class LocationIssueModel : IssueModel
{
public string LocationName { get; set; }
}
public class PersonIssueModel : IssueModel
{
public string PersonName { get; set; }
}
構成
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<LocationIssueModel>()
.Map(m =>
{
m.Properties(t => new { t.Key, t.RequestNumber });
m.ToTable("issue");
})
.Map(m =>
{
m.Properties(t => new { t.Key, t.LocationName });
m.ToTable("location_issue");
});
}
SQL
SELECT '0X0X' AS [C1],
[Extent1].[issue_ky] AS [issue_ky],
[Extent3].[request_nbr] AS [request_nbr],
[Extent1].[location_ky] AS [location_ky],
FROM [dbo].[Issue1] AS [Extent1]
INNER JOIN [wm].[location_issue] AS [Extent2] ON [Extent1].[issue_ky] = [Extent2].[issue_ky]
INNER JOIN [wm].[issue] AS [Extent3] ON [Extent1].[issue_ky] = [Extent3].[issue_ky]
を使用する必要がありますご覧のように、生成されたSQLは期待どおりではありません。
解決策は、TPT継承(Florianが示唆したように)と基本モデルでのエンティティ分割を使用することでした。 – warborn85