Нашел баг. Вот такой код:
(from goodsTemp in database.GoodsTemps
join sample in database.Samples on goodsTemp.SampleId equals sample.Id
where goodsTemp.PriceId == settingsId
where goodsTemp.IsFinished
where goodsTemp.Name != sample.Name
select goodsTemp)
.Set(arg => arg.SampleId,
arg => database.Samples.Where(sample => sample.Name == arg.Name).SingleOrDefault().Id)
.Set(arg => arg.CategoryId,
arg => database.Samples.Where(sample => sample.Name == arg.Name).SingleOrDefault().CategoryId)
.Update();
генерирует sql запрос:
UPDATE `GoodsTemp` `goodsTemp`
INNER JOIN `Sample` `sample2` ON `goodsTemp`.`SampleId` = `sample2`.`id`
SET `SampleId` = (
SELECT `sample`.`id`
FROM `Sample` `sample`
WHERE `sample`.`Name` = `goodsTemp`.`Name`
),
`CategoryId` = (
SELECT `sample1`.`CategoryId`
FROM `Sample` `sample1`
WHERE `sample1`.`Name` = `goodsTemp`.`Name`
)
WHERE `goodsTemp`.`price_id` = @settingsId AND
`goodsTemp`.`IsFinished` = 1 AND
`goodsTemp`.`Name` <> `sample2`.`Name`
который не отрабатывает. Ошибка "Column 'CategoryId' in field list is ambiguous".
Код должен быть таким:
UPDATE `GoodsTemp` `goodsTemp`
INNER JOIN `Sample` `sample2` ON `goodsTemp`.`SampleId` = `sample2`.`id`
SET `goodsTemp`.`SampleId` = (
SELECT `sample`.`id`
FROM `Sample` `sample`
WHERE `sample`.`Name` = `goodsTemp`.`Name`
),
`goodsTemp`.`CategoryId` = (
SELECT `sample1`.`CategoryId`
FROM `Sample` `sample1`
WHERE `sample1`.`Name` = `goodsTemp`.`Name`
)
WHERE `goodsTemp`.`price_id` = @settingsId AND
`goodsTemp`.`IsFinished` = 1 AND
`goodsTemp`.`Name` <> `sample2`.`Name`