Entity Framework 4 (CTP 5) параллелизм - PullRequest
2 голосов
/ 13 января 2011

С тех пор, как я прочитал о Code-First, я обнаружил, что с этим может быть проблема (хотя это всего лишь предварительный просмотр) У меня есть 2 проблемы с выпуском EF4 CTP5, как показано ниже:

Как сказано "Новый API отслеживания изменений" но он не отслеживает изменения я Угадай. По сравнению с LINQ to SQL я привести пример, чтобы увидеть, что каждый метод реагирует:

LINQ to SQL:

Dim db2 As New LINQDataContext
Dim db3 As New LINQDataContext

db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1"
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2"

db2.SubmitChanges()
db3.SubmitChanges()

EF 4 CTP5:

Dim db2 As New ProductContext
Dim db3 As New ProductContext

db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1"
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2"

db2.SaveChanges()
db3.SaveChanges()  

Эти коды отличаются только в своих контекстах. В LINQ to SQL второй SubmitChanges вызовет исключение «Строка не найдена или изменена». , но в EF он проигнорирует изменения и продолжит изменять строку дважды, что я считаю плохим, потому что мы нужно учитывать параллелизм, верно?

1 Ответ

9 голосов
/ 13 января 2011

Сосредоточив внимание на вашем первом сравнении, я полагаю, что у вас есть оптимистическая проверка параллелизма по умолчанию в LINQ to SQL.В EF вы должны явно пометить любые свойства, которые вы хотите проверить на параллелизм.Поскольку вы, скорее всего, не сделали этого для свойства Name, EF не заботится о том, чтобы кто-то изменил имя продукта в другой команде базы данных.

Я также хочу отметить, что в первую очередь это не кодповедение, но это поведение на протяжении всей EF.Если вы создаете модель данных сущностей, вам также необходимо явно пометить свойства для проверки параллелизма.

Если вы используете свободный API, ищите IsConcurrencyToken в качестве атрибута для установки свойства.Если вы используете аннотацию, взгляните на ConcurrencyCheckAttribute.

hth julie

...