У меня есть новый объект Entity Framework 4, который ссылается на другой объект, простую запись пользователя.В моих входных данных у меня может быть несколько экземпляров пользовательских записей одного и того же человека.Этот человек может не существовать в базе данных;если нет, мне нужно добавить их, создав новую сущность пользователя и добавив их.
Поэтому, когда я создаю основную сущность, которая ссылается на пользователя, я делаю быстрый поиск этого пользователя в базе данных.Если этот человек существует, отлично, я получил ссылку на сет.Если нет, я создаю новую запись пользователя и устанавливаю ссылку в основной сущности на вновь созданную сущность пользователя.Когда я обрабатываю больше записей, может появиться один и тот же пользователь, поэтому, когда я делаю запрос в функции «создать нового пользователя», я предполагал, что если существует только что созданная, но еще не сохраненная сущность, запрос найдет эту запись,но, видимо, нет (хорошо, может быть, глупое предположение) ... поэтому конечный результат заключается в том, что для этого пользователя создается дублирующая запись, связанная с новым основным объектом, и когда все это сохраняется, я получаю сообщение «Ошибка SQL 2601: Невозможновставить строку дубликата ключа в объект 'dbo.user_table' с уникальным индексом 'IX_user_table'. "ошибка.
Так что я немного озадачен, как решить эту ситуацию.Проблема в том, что я не могу вызвать SaveChanges () для контекста сразу после добавления новой пользовательской сущности, потому что это приводит к сохранению всего графа сущностей, а основная сущность, которая ссылается на записи пользователя, еще не завершена, этоне готов сохранить, поэтому я не могу сохранить весь беспорядок каждый раз, когда добавляю нового пользователя.Мне нужно создать все сущности, а затем сохранить все за один раз.
Нужно ли делать два запроса каждый раз, когда я ищу пользователя, один в базе данных и один что-то вроде:
var unsavedVisitors = from c in
dataContext.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added)
where c.Entity is my_table
select c.Entity;
Я действительно не возился с внутренностями менеджера состояния сущности, поэтому я не уверен, что здесь делать - как я могу сделать запрос, чтобы найти существующую, но не сохраненную сущность пользователя, которую я мог бы затем просто связатьк новым основным объектам, которые я создаю, когда я перебираю свои входные данные?Похоже, что я могу просто привести c.Entity выше к типу my_table и wala, у меня есть ссылка.Хотелось бы, чтобы был какой-то трюк «включить несохраненные сущности в мой запрос» или что-то подобное, чтобы избежать обхода всех несохраненных сущностей с таким количеством запросов - не так ли?