2012-06-30 2 views
1

Я очень новичок в Entity Framework, поэтому извиняюсь, если это очень плохой вопрос, но я не смог найти решение, которое имеет смысл для меня. Хотя моя проблема сложная, я попытаюсь ее упростить. Предположим, у меня две модели Company и CompanyAddress.Entity Framework - Как добавить объекты, ссылающиеся друг на друга, не зная первичного ключа

+--------------------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 
+--------------------------------------------------------------+ 

Как можно видеть лицо компании может иметь более одного CompanyAddress. В моем проекте ASP.NET MVC у меня также есть ViewModel.

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

Эти два свойства заполнены на виду и переданы контроллеру без проблем. Теперь проблема для меня начинается. Как мне вставить эти два объекта?

Предположим, что я вставляю объект Company сначала, а не захватываю его primaryKey с помощью оператора select и присваиваю это значение внешнему ключу CompanyAddress и вставляем его. Однако это не имеет смысла для меня, так как мне нужно сделать еще один запрос для первичного ключа.

Как я должен вставлять свои объекты, какой лучший подход? Извините за долгий вопрос и спасибо.

+0

Я не понимаю этого утверждения, которое вы сделали «Однако это не имеет смысла для меня, так как мне нужно сделать еще один запрос для первичного ключа». - Почему, по-вашему, вам нужно сделать еще один запрос для того же первичного ключа ключ? Как только вы вызываете SaveChanges() для Компании, у вас есть PrimaryKey в этом объекте. Назначьте его внешнему ключу для CompanyAddress и снова вызовите SaveChanges(). – TheGeekYouNeed

+2

Хмм, не знал этого. Как я уже сказал, я очень новичок в orm и ef. В любом случае, который решил мою проблему :), пожалуйста, напишите как ответ, чтобы я мог его принять. Спасибо ... –

+0

Рад помочь :) – TheGeekYouNeed

ответ

2

Как только вы вызываете SaveChanges() для Компании, у вас есть PrimaryKey в этом объекте. Назначьте его внешнему ключу для CompanyAddress и снова вызовите SaveChanges().

+1

Кстати, это хороший подход? Я думал о назначении адреса компании через навигационное свойство, а затем вставлял компанию и адресную сущность вместе. Вместо того, чтобы сначала вставлять компанию, а затем адрес? –

+1

ЕСЛИ у вас есть ваша база данных настроена правильно, что тоже работает. И это один шаг, а не два. Что, более эффективно :) – TheGeekYouNeed

Смежные вопросы