2016-05-24 10 views
-1

外部APIからデータを取得していて、Entity Frameworkを使用してSQL Serverに保存したいとします。私が得ているデータは注文情報です。C#Entity Frameworkプライマリキー違反

注文:

  • 注文ID

  • カスタマー

  • 配送先住所

  • アイテム

012のデータは、おおよそ次のようにレイアウトされています

お客様:

  • カスタマーID
  • お客様詳細

問題は、どの顧客が複数の注文を行うことができるということです。私のエンティティフレームワークは、Order情報をベースにしています。したがって、顧客が複数の注文を行う場合、注文はされていないにもかかわらず、顧客がすでにデータベースに入っているため、主キー違反が発生します。参考のため

:私は、通常はそうのような注文を追加します。orderContext.Orders.Add(order);

すべての注文は、顧客データを含んでいるので、私は顧客を「追加」することなく、秩序を追加することはできません。既存の顧客を確認する場合でも、Ordersテーブルにレコードを追加する必要がありますが、それでも問題が発生します。各「子」クラスを追加または更新するようにEFに指示する方法はありますか?

ここの例は、実際のデータよりも単純です。このようないくつかの他の依存関係があります。たとえ、私がEFの基礎としてCustomerクラスを使用するように切り替えるとしても、それはまだこの問題を抱えています。

+0

あなたは顧客IDを持っています。なぜそれを使って前の顧客のインスタンスとマッチさせることができないのですか?必要な更新を行いますか? –

+0

データベースの構造は何ですか? OrdersテーブルとCustomersテーブルを持っていますか?エンティティと、キャストされてSQLサーバー(コード)に保存されるAPI応答の例を表示します。 –

+0

私はあなたの注文に切断された顧客を割り当てていると思います。注文が挿入されると、EFは新しい顧客であると判断し(切断されているため)、同じIDの別の顧客を挿入しようとします。解決策は、ナビゲーションプロパティの代わりにCustomerIDを使用するか、変更されていないエントリとしてコンテキストに顧客を添付することです。 –

答えて

0
は、このようなあなたのテーブルを変更し

は、誰もOrderがちょうど Customerを持っており、すべてのCustomerが多くまたはゼロOrder

注文(受注コードを、持っているので、これは、あなたのOrderテーブルに得意先を追加します得意先コード、出荷先住所)

お客様(CustomerID、...)

関連する問題