У меня есть таблица улиц, в которой есть комбинация из двух строковых столбцов, действующих в качестве PK, которые являются почтовым индексом и уличным кодом.
С EF4.1 и DBContext я хотел бы написать один метод "Сохранить", который использует улицу (входит в неприсоединенное состояние), проверяет, существует ли она уже в базе данных. Если это так, он выдает ОБНОВЛЕНИЕ, а если нет, то выдает ВСТАВКУ.
FYI, приложение, которое сохраняет эти улицы, читает их из текстового файла и сохраняет их (в этом файле несколько десятков тысяч этих "линий улиц").
На данный момент я придумал:
public void Save(Street street)
{
var existingStreet = (
from s in streetContext.Streets
where s.PostalCode.Equals(street.PostalCode)
&& s.StreetCode.Equals(street.StreetCode)
select s
).FirstOrDefault();
if (existingStreet != null)
this.streetContext.Entry(street).State = System.Data.EntityState.Modified;
else
this.streetContext.Entry(street).State = System.Data.EntityState.Added;
this.streetContext.SaveChanges();
}
Это хорошая практика? Как насчет производительности здесь? Потому что для каждой улицы она сначала совершает обход туда, чтобы узнать, существует ли она.
Не лучше ли было бы с точки зрения производительности попытаться вставить улицу (состояние = добавлено) и отследить любые нарушения ПК? Затем в блоке catch я могу изменить состояние на «измененное» и снова вызвать SaveChanges (). Или это не будет хорошей практикой?
Есть предложения?
Спасибо