Используя API EF5 Fluent, кто-нибудь знает, возможно ли иметь бинарный столбец в базе данных, но длинный в C#? Когда мы помещаем длинный объект, мы всегда получаем ошибки EF во время выполнения (невозможно выполнить сопоставление). Если мы поместим байт [], тогда все работает (двоичный в db обычно означает тип byte [] в коде .NET). Мы не можем изменить тип столбца базы данных, чтобы он не был решением.EF5 Fluent API byte array to long
Вот что мы в конечном итоге делает:
from l in LeadDataRepository.GetAll()
select new { // we need an anonymous type here we use Linq to Entities
FirstName = l.FirstName,
LastName = l.LastName,
CompanyName = l.CompanyName,
CityId = l.CityId,
DbID = l.DbId
}).ToList() // once listed we use Linq to objects
.Select(l => new LeadListingViewModel() { // our real class
FirstName = l.FirstName,
LastName = l.LastName,
CompanyName = l.CompanyName,
CityId = l.CityId.ToLong(), // here we use our extension method on byte[] which converts to long
DbID = l.DbId.ToLong()
})
Если бы мы были в состоянии указать в сущности, CityId длинный (а не байт []) и то же самое для DBID тогда мы не нужно было бы делать весь этот redondant код. Поэтому это невозможно, EF жалуется во время выполнения (поскольку тип столбца db двоичный). Но SQL Server обрабатывает неявное преобразование из двоичного кода в BigInt ...
Привет, мы отдаем себе отчет Bitconverter, но это не представляется возможным назвать «стандартной» функции в запросе Linq. Для этого вам нужно сначала использовать анонимный тип, перечислить его, а затем запрограммировать на нужный тип – Fabien
, можете ли вы показать свой запрос? – aiapatag
Где находится свойство byte [], которое вы пытаетесь преобразовать в long? – aiapatag