2017-12-05 28 views
1

を働いていない私はこのように定義された同じテーブルから2つの外部キーがあります。Entity Frameworkのコードファースト - 同じテーブルから2つの外部キーは

modelBuilder.Entity<OfferTemplate>() 
      .HasRequired(ca => ca.CompanyAgentBuyer) 
      .WithMany(t => t.OfferTemplatesAsBuyer) 
      .HasForeignKey(ca => ca.CompanyAgentBuyer_CompanyAgentID) 
      .WillCascadeOnDelete(false); 

modelBuilder.Entity<OfferTemplate>() 
      .HasOptional(ca => ca.CompanyAgentBroker) 
      .WithMany(t => t.OfferTemplatesAsBroker) 
      .HasForeignKey(ca => ca.CompanyAgentBroker_CompanyAgentID) 
      .WillCascadeOnDelete(false); 

:私は、このセットアップを得たモデルに

public class OfferTemplate { ... 
[ForeignKey("CompanyAgentBuyer_CompanyAgentID")] 
[InverseProperty("OfferTemplatesAsBuyer")] 
public virtual CompanyAgent CompanyAgentBuyer { get; set; } 

[ForeignKey("CompanyAgentBroker_CompanyAgentID")] 
[InverseProperty("OfferTemplatesAsBroker")] 
public virtual CompanyAgent CompanyAgentBroker { get; set; } 

public int CompanyAgentBuyer_CompanyAgentID { get; set; } 
public int? CompanyAgentBroker_CompanyAgentID { get; set; } 
... 
}  

をこれまでのところ、クエリを実行する場合を除いてすべてが機能します。

var templates = from user in context.UsersInformation 
          from cTemplate in context.OfferTemplates 
          where user.User.Equals(userID) && cTemplate.Company == user.Company 
          select cTemplate; 

var x = templates.FirstOrDefault().CompanyAgentBuyer; 

IDプロパティ(CompanyAgentBuye r_CompanyAgentID & CompanyAgentBroker_CompanyAgentID)が(この場合はxのような)インスタンスが移入されていない場合、正しく移入されています。私はIncludeメソッドを使ってみましたが、どちらもうまくいきませんでした。私の欠点は何ですか?

+0

ここではインクルードを行いますか?結合と投影のクエリを実行するので、クエリの再グループ化後に完了しなければ、インクルードは破棄されます。 – DevilSuichiro

+0

@DevilSuichiroありがとうございます。いいえ、私は現在Includeを使用していません。 – paburgos

答えて

0

私はこれまでのモデルを変更してしまう:

 modelBuilder.Entity<CompanyAgent>() 
      .HasMany(e => e.OfferTemplatesAsBroker) 
      .WithOptional(e => e.CompanyAgentBroker) 
      .HasForeignKey(e => e.CompanyAgentBroker_CompanyAgentID); 

     modelBuilder.Entity<CompanyAgent>() 
      .HasMany(e => e.OfferTemplatesAsBuyer) 
      .WithRequired(e => e.CompanyAgentBuyer) 
      .HasForeignKey(e => e.CompanyAgentBuyer_CompanyAgentID) 
      .WillCascadeOnDelete(false); 

は今それが働いています。

関連する問題