У меня проблема с Entity Framework 4 CTP 5, которая, как я понимаю, LINQ to SQL обрабатывает лучше, чем эта, но я настаиваю на использовании EF 4 из-за его функции Code-First.
Так вот моя проблема:
Представьте продукты с их тегами (или с чем-либо с отношением один ко многим ). И tblTags будет меняться, удаляя некоторые и вставляя некоторые теги за один раз пользователем (и пользователь может изменить их совершенно по-другому). Так что, на мой взгляд, мы можем просто удалить все старые теги и вставить новые (самое простое), хотя это простая идея, LINQ to SQL справляется с этим совершенно потрясающе, в отличие от EF 4. Коды для сравнения с LINQ:
LINQ to SQL:
Dim oldTags = ctx.Tags.Where(Function(m) m.ProductID = pID)
Dim newTags = 'from user input, like from the model which was posted, like in MVC'
ctx.Tags.DeleteAllOnSubmit(oldTags)
ctx.Tags.InsertAllOnSubmit(newTags)
ctx.SubmitChanges()
EF 4 CTP5:
Dim oldTags = ctx.Tags.Where(Function(m) m.ProductID = pID)
Dim newTags = 'from user input, like from the model which was posted, like in MVC'
For Each item In oldTags
ctx.Tags.Remove(item)
Next
For Each item In newTags
ctx.Product.Add(item)
Next
ctx.SaveChanges()
Я пытаюсь сказать следующее:
- В LINQ to SQL он сначала попытается обновить
старые (вместо удаления их из БД). Затем вставьте дополнительные теги.
- Но в Entity Framework он создает и отправляет один запрос для каждого " remove " и один
запрос для каждого " add ".
EF не рассчитывает обновления, но выполняет то, что ему велено (не более). он будет отправлять множество запросов через SQL, поэтому без всяких причин будет расти мой столбец с автоматическими номерами.
Я знаю, что могу решить некоторую логику для второй проблемы, и тогда я предпочитаю LINQ to SQL таким образом.
Но я ничего не могу сделать с запросами на передачу в SQL. Звучит не оптимизировано.
Я хочу, чтобы Code-First сочетался с этими функциями, которые в настоящее время есть в LINQ to SQL (вычисление данных перед фиксацией). Любое предложение? Я сделал что-то не так в коде EF? Или это будет похоже на LINQ to SQL при внесении изменений в RTM-версию?
UPDATE
Если вы не согласны с таким поведением, скажите об этом и оставьте комментарий.
И если вам нужна дополнительная информация, пожалуйста, скажите мне, чтобы предоставить некоторые.
Я обновляю этот пост, потому что я все еще жду ответа. Спасибо за ваше время.