Как обойти преобразование параметров к int
От: Аноним  
Дата: 17.08.12 08:29
Оценка:
Столкнулся с интересной проблемой, .net все типы в выражениях ниже int приводит к int,
что очень мешает в некоторых случаях, а именно:

таблица:
[TableName("Table")]
public class TableRow
{
[PrimaryKey]
public long Id;
[MapField("send_status")]
public SendStatusEnum SendStatus;
}
 
public enum SendStatusEnum : byte
{
SendNotAllowed = 1,
SendAllowed =2,
Sent = 3
}


CREATE TABLE [Table](
[id] [bigint] NOT NULL PRIMARY KEY CLUSTERED,
[send_status] [tinyint] NOT NULL,
)


код linq запроса:
_db.Table
.Where(j => j.Id < identity && j.SendStatus == SendStatusEnum.SendNotAllowed)
.Update(row =>
new Table
{
SendStatus = SendStatusEnum.SendAllowed
});



приводит к генерации sql запроса:
UPDATE [j]
SET [send_status] = 2
FROM
[Document].[SELL_SESSION_SEND_ATTRIBUTE] [j]
WHERE [j].[Id] < 123 AND Convert(Int, [j].[send_status]) = 1


он приводит поле в таблице к Int, несмотря на то, что enum имеет тип byte (enum SendStatusEnum : byte)
Convert(Int, [j].[send_status]) = 1

как можно обойти такое поведение?
иначе это может сильно мешать использованию индексов в БД + лишние расходы на конвертацию
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.