Entity Frameworkコアでエンティティリレーションシップを設定する方法

.net-core asp.net-core c# ef-code-first-mapping entity-framework-core

質問

ここではEFコア上にあり、3つのテーブルがあります:

  1. ニュース
  2. アイテム
  3. リンク

その他(ニュース、アイテムを除く):コンテンツ、投稿、フォームなど

そして私のモデル定義

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public Link Link { get; set; }
}

public class News
{
    public int Id { get; set; }
    public string Header { get; set; }
    public string Content { get; set; }
    public Link Link { get; set; }
}

public class Link
{
    public int Id { get; set; }
    public string Type { get; set; }
    public int RowId  { get; set; }
    public string Url { get; set; }
}

Linksは、すべてのニュースと各アイテムのURLが記載されています。つまり、 Linksは4つの列があります。

  1. イド
  2. タイプ - ニュースまたはアイテム
  3. RowId - ItemまたはNewsのIDを含む(タイプに依存)
  4. URL

関係を設定するには?リンクテーブルのURLでエンティティを解決する必要があることに注意してください。

受け入れられた回答

ダッパJust Dapperはカスタムクエリを書くことができます。


人気のある回答

プロパティNewRowと他の2つのテーブルへの制約を持たせるには、次のようにコールドインプリメントします:

public int RowId { 
    public get {
        return this.Type.equals("news") ? NewsId.Value : ItemId.Value;
    };   
    private set {
        if(this.Type.equals("news")){
          NewsId = value;
        }
        else{
          ItemId = value;
        }
    }
}

このプロパティをContextDBにマップされていないものとして設定します。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ