2017-07-28 6 views
1

私のドメインモデルは、TradeにはTradeLegが多いことがあります。私は次のマッピングを使用しようとしています。Entity Framework 6では、もう一方のナビゲーションプロパティを使用して1対多マッピングを作成するにはどうすればよいですか?

HasKey(t => t.TradeLegId); 
Property(t => t.TradeLegId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 
    .HasColumnName("TradeLegId");          
Property(t => t.TrdId).HasColumnName("TrdId"); // FK back to trade 
Property(t => t.Ordinal).HasColumnName("Ordinal"); 
Property(t => t.Description).HasColumnName("Description"); 

ToTable("TradeLeg");   

私はExcpetionを取得し、いくつかの取引を選択しよう

展覧マッピング

HasKey(t => t.TradeId); 
Property(t => t.TradeId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 
    .HasColumnName("TradeId");          
Property(t => t.Description).HasColumnName("Description"); 
Property(t => t.CounterpartyId).HasColumnName("CounterpartyId"); 
Property(t => t.Quantity).HasColumnName("Quantity"); 
Property(t => t.IsActive).HasColumnName("IsActive"); 

HasMany(t => t.TradeLegs); 

ToTable("Trade"); 

貿易脚マッピング。

無効な列名Trade_TradeId

私はそれが貿易に戻っTradeLegのナビゲーションプロパティを追加し、Tradeオブジェクトに私のHasMany()マッピングに.WithRequired(u => u.Trade).HasForeignKey(u =>u.TrdId)を追加することで動作させることができます。

しかし、私はTradeLegのナビゲーションプロパティをTradeに戻したくありません。私はちょうどTradeLegにint FKプロパティ(TrdId)を持っています。また、TradeLegのFKプロパティとしてTrdIdの代わりにTradeIdを使用すると、デフォルトルールのためにも機能することに気付きました。 HasMany()の反対側のFKフィールドの名前をEFに伝える方法はありますか?

答えて

1

TradeオブジェクトのマッピングはHasMany()を使用する必要があります。以下のようなものが動作するはずです。

HasMany(t => t.TradeLegs) 
    .WithRequired() //use WithOptional for optional no need to specify the mapping on the other side. 
    .HasForeignKey(leg => leg.TrdId); 

これは私のマッピングオブジェクトの1つでEF6でテストしたところ、うまくいくようです。

これと同じ考え方は、あなたがそのような迅速な対応のための

HasRequired(x => x.Property) 
    .WithMany() //no need to specify the navigation property on the other side 
    .HasForeignKey(x=> x.ForeignKeyProperty); 
+0

おかげで非常に多くのように、親のナビゲーションプロパティなしで子供に一対多たい他の方法で作業することができます。私はナビゲーションのプロパティが両方の側に存在し、すべてが期待どおりに動作するように見える場合、両側に空の句を使用してみました。 with節に逆方向ナビゲーションプロパティを追加することで得られるべきことはありますか?もしそうでなければ、私は週が空のままで忘れ去られることがあります。 – Shane

+0

IMOナビゲーションプロパティがどのように設定されているかを正確に表現しようとしています。他の開発者(自分自身)に目的に応じた逆方向のナビゲーションプロパティがないことを伝えています。今度は、その逆が "戻る"ことができる複数のプロパティを持つ場合があります。エンティティに、同じタイプの2つのエンティティに対するナビゲーションプロパティがあるとします。これは実際のプロパティを指定せずに動作しません。例としては、子の2つの親エンティティ(オプション)があります。同じ種類の 'ParentA'と' ParentB'を両方とも持っていれば、ナビゲーションプロパティの設定がなければ、これはうまく動作しません。 – Nico

+0

ポイントが意図を伝えるのに要したポイントですが、あなたが言及したケースでは、両方の親にナビゲーションプロパティを持ち、マッピング内に空の句が残っている必要があると思っていましたが、 linqを使ってクエリを実行し、関連するエンティティを参照したいとします。それはあなたが意味することですか? – Shane

関連する問題