2012-06-30 34 views
1

我对实体框架非常陌生,所以如果它是一个非常糟糕的问题,我很抱歉,但是我找不到对我有意义的解决方案。虽然我的问题很复杂,但我会尽量简化它。假设我有两个模型Company和CompanyAddress。实体框架 - 如何在不知道主键的情况下添加引用对象的实体

+--------------------Company---------------------------------------+ 
| int CompanyId 
| string CompanyName 
| 
| virtual <ICollection>CompanyAddress address // Navigation Property 
+-------------------------------------------------------------------+ 

而且,

+--------------------CompanyAddress---------------------------+ 
| int CompanyAddressId 
| string Address 
| 
| int CompanyAddressId   // Foreign Key to Address Table 
| virtual CompanyAddress address // Related Navigation Property 
+--------------------------------------------------------------+ 

如可以看出公司实体可以有一个以上的公司地址。在我的ASP.NET MVC项目中,我也有ViewModel。

+--------------------CompanyCreateViewModel----------------+ 
| Company company 
| CompanyAddress address 
+---------------------------------------------------------+ 

这两个属性在视图中填充并传递给控制器​​没有问题。我的问题现在开始了。我应该如何插入这两个实体?

比方说,我首先插入公司实体,然后用select语句获取其primaryKey并将此值分配给CompanyAddress的外键并插入它。但是,这对我来说没有意义,因为我需要提供另一个主键请求。

我应该如何插入我的实体,什么是最好的方法?对不起,很长的问题,谢谢。

+0

我不明白你所说的这个陈述“但是,这对我来说没有意义,因为我需要提供另一个主键请求。” - 为什么你认为你需要为同一个主键做出另一个请求键?一旦您为公司调用SaveChanges(),您就会在该对象中拥有PrimaryKey。将其分配给CompanyAddress的外键并再次调用SaveChanges()。 – TheGeekYouNeed

+2

嗯,不知道。正如我所说,我对orm和ef事物非常陌生。无论如何,这解决了我的问题:)请写作答案,我可以接受它。谢谢... –

+0

很高兴帮助:) – TheGeekYouNeed

回答

2

一旦您为公司调用SaveChanges(),您在该对象中具有PrimaryKey。将其分配给CompanyAddress的外键并再次调用SaveChanges()。

+1

顺便说一句,这是一个很好的方法?我正在考虑通过导航属性将地址分配给公司,然后将公司和地址实体一起插入。不是先插入公司,然后是地址? –

+1

如果你的数据库设置正确,那也可以。这是一步,而不是两步。哪个更有效率:) – TheGeekYouNeed

相关问题