Качество автоматически сгенерированных SQL-запросов в Visual Studio - PullRequest
0 голосов
/ 03 апреля 2009

У меня возникла проблема с автоматически сгенерированным оператором удаления. На мой взгляд, удаление должно было быть

DELETE [tablename] where [PK] = @param

но вместо этого он генерирует запрос с 4 OR.

DELETE FROM Market
WHERE     (@IsNull_Name = 1) 
AND (Name IS NULL) 
AND (@IsNull_Description = 1) 
AND (Description IS NULL) 
AND (MarketId = @Original_MarketId) 
OR
(@IsNull_Name = 1) 
AND (Name IS NULL) 
AND (Description = @Original_Description) 
AND (MarketId = @Original_MarketId) 
OR
(Name = @Original_Name) 
AND (@IsNull_Description = 1) 
AND (Description IS NULL) 
AND (MarketId = @Original_MarketId) 
OR
(Name = @Original_Name) 
AND (Description = @Original_Description) 
AND (MarketId = @Original_MarketId)

Инструменты набора данных почти настаивают на наличии запросов, включающих PK / индексы, почему он генерирует такой сложный код?

Является ли этот код «наилучшей практикой», если он может привести меня к какой-то документации?

Конечно, простой случай - это требуемый код на 99%, остальные 1% должны быть временем, когда вам нужно отредактировать автоматически сгенерированный код или добавить наш собственный.

1 Ответ

1 голос
/ 03 апреля 2009

Это основано на оптимистическом параллелизме - перед удалением необходимо проверить, чтобы все значения были одинаковыми.

...