2011-08-02 187 views
0

我有,我正在创建它们通过导航性能(外键)相连的两个新对象的场景添加新的对象,并链接到第二个新的对象,如:实体框架:通过导航属性

  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跟踪分配的客户端和电子邮件地址是从数据库EF您的电子邮件地址实体应正确设置FK返回之间,一旦真正的id引用。

+0

在你的例子中,'客户'是导航属性吗? – pierre

+0

是的,它是导航属性。 –

+0

谢谢,我相信这是我正在寻找的答案;虽然这对我不起作用 - 我相信这是与MySQL/Connector不支持无符号外键列有关。 – pierre