Entity Framework - добавьте для объединения только значения внешнего ключа - PullRequest
3 голосов
/ 23 сентября 2010

ОК, у меня есть 3 таблицы, позвоните им:

Человек

  • PersonID
  • Имя

Магазин

  • StoreID
  • Имя

PersonStore

  • PersonID
  • StoreID

Теперь у меня есть форма, которая позволяет добавлять магазины человеку.Тем не менее, я получаю идентификатор магазина обратно из формы.Я действительно не хочу делать запрос, чтобы получить объект хранилища из Entity Framework.Я просто хочу добавить в таблицу, используя StoreID и объект Person, который у меня есть.

1 Ответ

5 голосов
/ 23 сентября 2010

По умолчанию в EF эта таблица соединения не будет отображаться как сущность, вместо этого вы получите отношение многие ко многим, которое будет отображаться как два свойства навигации

т.е.

Person.Stores
Store.People

Если вы хотите построить взаимосвязь «многие ко многим» без извлечения сущностей, тогда лучшим способом будет присоединение заглушек.

var person = // you already have the person
var store = new Store{StoreID = 5} // you know the storeID

ctx.AttachTo("Stores", store);
ctx.AttachTo("People", person); // assuming the person isn't already attached
person.Stores.Add(store);
ctx.SaveChanges();

Единственная проблема с этим кодом - он потерпит неудачу, если связь уже существует, поэтому вам нужно быть уверенным, что вы создаете новое отношение

Подробнее об использовании объектов-заглушек, подобных этой, вы можете прочитать my post . Надеюсь, это поможет.

Alex

Редактировать из OP:

Так как я использую EF4, я использовал следующий код для удаления строки из присоединения (спасибо совету 13 из ссылки).

var person = // you already have the person
var store = new Store{StoreID = 5} // you know the storeID

ctx.Stores.Attach(store);
person.Stores.Add(store);
ctx.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...