Вставить в таблицы отношений «многие ко многим» - PullRequest
0 голосов
/ 07 ноября 2011

Простой сценарий

[ClientTable]: ClientId, ClientName, Phone, Age
[CityTable]: CityID, CityName, Country
[ClientCityTable]: ClientCityID, ClientID, CityID

Client client = new Client("John", 123456789, 40);
City city = new City("NY", USA);
ClientCity clientCity = new ClientCity(client, city);

Должен ли я сделать InsertOnSubmit для каждого объекта (таблицы) или только для clientCity?Или это не имеет значения?В чем разница?

РЕДАКТИРОВАТЬ

Я спрашиваю, должен ли я сделать

DatabaseDC dc = new DatabaseDC(connectionString);
dc.Client.InsertOnSubmit(client);
dc.City.InsertOnSubmit(city);
dc.ClientCity.InsertOnSubmit(clientCity);
dc.SubmitChanges();

или только

DatabaseDC dc = new DatabaseDC(connectionString);
dc.ClientCity.InsertOnSubmit(clientCity);//because this object has references to client and city
dc.SubmitChanges();

?

РЕДАКТИРОВАТЬ 2

Я сделал несколько попыток, и даже если я использую InsertOnSubmit только для client, записи также вставляются в City иClientCity.Как мне сделать это правильно?

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Из результата это действительно не имеет значения.Оба способа верны.

Преимущества второго (только одна вставка)

  • очиститель
  • меньше кода

Преимуществопервый

  • для людей, которые плохо знакомы с Linq2sql, легче читать / понимать
  • также, если нет правильных ссылок, будет сделана вставка (или это недостаток ?,до вас)

Как вы уже узнали, результат тот же.

1 голос
/ 07 ноября 2011

Как правило, вы должны убедиться, что связанные таблицы существуют до вставки, иначе вы можете получить ошибку (зависит от того, ограничили ли вы свои таблицы sql).

Вы также можете создавать пользовательские вызовы хранимых процедур для вставок и обновлений, эти процедуры могут гарантировать правильность связанных таблиц.

IMHO linq-to-sql хорош для сложного выбора, но не так прост в использовании для обновления базы данных. (Часто я видел, как это создает серьезные проблемы с производительностью.)

...