2011-08-02 6 views
0

ナビゲーションプロパティを使用して新しいオブジェクトと第二の新しいオブジェクトへのリンクを追加し、例えば:Entity Frameworkは:私は、ナビゲーションプロパティ(外部キー)を介して連結された2つの新しいオブジェクトを作成していたシナリオを持って

  ClientAccount client = new ClientAccount { 
       ...... 
       AccountTypeId = 1 
      }; 

      ClientEmailAddress email = new ClientEmailAddress { 
       ClientId = client.Id, 
       EmailAddress = "[email protected]" 
      }; 

      client.FkClientEmailAddresses.Add(email); 
私は dbContext.SaveChanges();を経て、しかし保存しようとすると

は、私は例外を取得:

Cannot add or update a child row: a foreign key constraint fails (`test`.`client_email_addresses`, CONSTRAINT `FK_client_email_addresses_client_accounts` FOREIGN KEY (`client_id`) REFERENCES `client_accounts` (`client_account_id`)) 

私はClientAccountオブジェクトは、私がClientEmailAdresssオブジェクトに割り当ててる時にIDを持っていないため、これがあると信じています。

私がしようとしていることは誰でも確認できますか?私はむしろ複数の.SaveChanges呼び出しを持っていないだろう。

+0

は、 'ClientAccount' idが自動的に生成されますか? – Eranga

+0

はい、そうです。これはMySQLの自動インクリメントです。 – pierre

答えて

1

あなたは代わりにこれを使用する必要があります。

 ClientAccount client = new ClientAccount { 
      ...... 
      AccountTypeId = 1 
     }; 

     ClientEmailAddress email = new ClientEmailAddress { 
      Client = client, 
      EmailAddress = "[email protected]" 
     }; 

     client.FkClientEmailAddresses.Add(email); 

これはEFが正しくメールアドレスのエンティティにFKを設定する必要があり、データベースのEFから返され割り当てられたクライアントとメールアドレスの間と実際のid一度の参照を追跡することができます。

+0

あなたの例では、 'Client'はナビゲーションプロパティですか? – pierre

+0

はいナビゲーションプロパティです。 –

+0

ありがとう、私はこれが私が探していた答えであると信じています。これは私のためには機能しませんが、私はそれが署名されていない外部キー列をサポートしていないMySQL/Connectorと関係していると信じています。 – pierre

関連する問題