После обновления до EntityFramework 2.1.11 я столкнулся со следующей проблемой.
System.Data.SqlClient.SqlException (0x80131904): Type Flag is not a defined system type.
Я получаю эту ошибку для внутреннего перевода Linq to SQL. В таблице базы данных есть два столбца с типом tinyint, которые имеют соответствующий тип C # в виде байта, который вызывает исключение в Linq при выполнении запроса.
Причина в том, что column == 1
переводится как CAST(1 AS Flag)
внутренне в 2.1, которая работала в 2.0.
Это работает, если мы change == 1
до == Convert.ToByte(1)
или назначаем байтовую переменную и используем ее как ==
переменную, которая, я думаю, не идеальное исправление.
Это фрагмент кода, который выдает ошибку.
var query = await (from pl in _azureContext.Product.AsNoTracking()
where pl.Primary ==1 && pl.Deleted == 0
select new Product
{
ProductId = pl.ProductId,
ProductName = pl.ProductName
}).OrderBy(P => P.ProductName).ToListAsync<Product>();
Внутренний перевод SQL, который выдает исключение, выглядит следующим образом:
SELECT [pl].[ProductId] , [pl].[ProductName] FROM [Products] AS [pl] WHERE ([pl].[Primary] = CAST(1 AS Flag)) AND ([pl].[Deleted] = CAST(0 AS Flag)) ORDER BY [pl].[ProductName]
Ожидаемый перевод SQL выглядит следующим образом:
SELECT [pl].[ProductId] , [pl].[ProductName] FROM [Products] AS [pl] WHERE ([pl].[Primary] = 1) AND ([pl].[Deleted] = 0) ORDER BY [pl].[ProductName]
Похоже, ошибка в Entityframework Core 2.1. Может ли кто-нибудь помочь мне в этом?
Добавлена дополнительная информация на основе комментариев Дэвида.
1) Я не создал ни одного пользовательского типа для этого и не пропал.
2) Тип данных C # - Byte для pl. Primary и pl.Deleted.
3) В dbContext я вижу следующее в методе onModelCreating.
entity.Property (e => e.Primary) .HasColumnType ("Flag");
entity.Property (e => e.Deleted) .HasColumnType ("Flag");
Примечание: DbContext был сгенерирован ранее с помощью .net core 2.0, и никаких изменений в коде для этого не было.