linq2db MySQL. Update падает с ошибкой.
От: teos  
Дата: 14.02.14 09:16
Оценка:
Нашел баг. Вот такой код:

(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`
linq2db mysql update
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.