2016-06-17 3 views
1

2つのエンティティ間のオプション:必須関係を設定しようとしています。FundRedemptionFeeです。ファンドには償還手数料がある場合とない場合がありますが、償還手数料には資金が必要です。モデルは、私は問題は程度があるのでFund対象に、FundIdは私の主キーであり、この方法で滞在する必要があるという事実であると思われるもの基本的にこの(非関連のプロパティは省略)エンティティフレームワーク - オプション構成:異なる外部キーで必要です

public class Fund 
{ 
    public int FundId {get; set;} 
    public string FundCode {get; set;} 

    public virtual RedemptionFee RedemptionFee {get; set;} 
} 

public class RedemptionFee 
{ 
    public string FundCode {get; set;} 
    public virtual Fund Fund {get; set;} 
} 

ですFundFundIdを介して関連している6または7の他のエンティティ。 RedemptionFeeには、FundCodeが主キーです。 FundCodeFundオブジェクトの一部ですが、主キーではありません。

私は(基金EntityTypeConfigurationオブジェクトで)このような関係を設定しよう

HasOptional(f=>f.RedemptionFee).WithRequired(f=>f.Fund); 

生成されたSQLは、彼らの主キーのそれぞれにRedemptionFeeのテーブルに基金のテーブルに参加しようとしています明らかに動作しません。生成されたSQLがFundCodeを介して2つのテーブルを結合するように指定する必要があります。

これを行う方法はありますか?それはかなり基本的なSQLですが、私は何かが欠けていない限り、EFでは不可能と思われます。EFは従属関係の外部キーをプライマリの主キーと同じにする必要があるようです。基本的には、関係を定義するために使用する任意の列を選択します。

答えて

0

1対1の関係では、プリンシパルと依存エンティティがあります。依存エンティティでは、そのエンティティのPKであるFKプロパティ。あなたは、今

public class Fund 
{ 
    [Key] 
    public string FundCode {get; set;} 

    public virtual RedemptionFee RedemptionFee {get; set;} 
} 

public class RedemptionFee 
{ 
    [Key] 
    [ForeignKey("Fund")] 
    public string FundCode {get; set;} 
    public virtual Fund Fund {get; set;} 
} 

:ので、それはあなたの校長のPKと一致する を私はあなたの問題を解決するために行うことをお勧めすることは、あなたの基金の実体にPKとしてFundCodeを使用していますあなたの実体が直接関係するつもりされていないこれらの構成で

modelBuilder.Entity<Fund>().HasOptional(f=>f.RedemptionFee).WithMany().HasForeignKey(f=>f.FundCode); 
modelBuilder.Entity<RedemptionFee>().HasRequired(f=>f.RedemptionFee).WithMany(); 

しかし、もちろんの:あなたのモデルを変更することはできません、だけでなく、あなたが必要なモデルを実現するために、2つの関係を作ることができると言いました。

関連する問題