0

EF Code First の使用 1 つのモデル オブジェクトに関連付けられた複数のプロパティを持つモデル オブジェクトがあります。

public class Job 
{
    public int Id { get; set; }
    public int Company1Id { get; set; }
    public int Company2Id { get; set; } // References CompanyId
    public int Company3Id { get; set; } // References CompanyId
    ...

    public virtual Company Company1Info { get; set; }
    public virtual Company Company2Info { get; set; }
    public virtual Company Company3Info { get; set; }
 }

 public class Company
 { 
    public int CompanyId { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
 }

JobMap クラスの関係

        this.HasRequired(t => t.Company1Info)
            .WithMany()
            .HasForeignKey(d => d.Company1Id);
        this.HasRequired(t => t .Company2Info)
            .WithMany()
            .HasForeignKey(d => d.Company2Id);
        this.HasRequired(t => t.Company3Info)
            .WithMany()
            .HasForeignKey(d => d.Company3Id);

私のレポでデータを取得する方法

 public Job GetById(int id)
    {
        return _dbContext.Set<Job>()
            .Include(t => t.Company1Info)
            .Include(t => t.Company2Info)
            .Include(t => t.Company3Info)
            .First(x => x.Id == id);
    }

アプリケーションを実行すると、Company2Info と Company3Info が null になります。コンテキスト内の各企業に対して新しい DbSet インスタンスを設定しようとしましたが、Unsupported Exception.

ありがとう!

更新:これは同じ問題に対する回答ですが、これは私にとっては機能しませんEntity Framework Code First - 同じテーブルからの2つの外部キー

4

1 に答える 1

0

解決:

私の質問の設定とリンクの解決策は正しいです。インスタンスを作成していたオブジェクト モデルは、キーが存在しないため null でした。つまり、参照しようとしていた会社の ID が存在しませんでした。

私が行った唯一の変更は、WillCascadeOnDeleteメソッドを追加しfalseて、デフォルトが true であるように設定することでした。ここでは、Context ModelBuilder ではなく、JobMap クラスで Fluent API を使用していることに注意してください。

JobMap クラスの関係

    this.HasRequired(t => t.Company1Info)
        .WithMany()
        .HasForeignKey(d => d.Company1Id)
        .WillCascadeOnDelete(false);
    this.HasRequired(t => t .Company2Info)
        .WithMany()
        .HasForeignKey(d => d.Company2Id)
        .WillCascadeOnDelete(false);
    this.HasRequired(t => t.Company3Info)
        .WithMany()
        .HasForeignKey(d => d.Company3Id)
        .WillCascadeOnDelete(false);

HTH

于 2012-05-22T12:07:45.503 に答える