使用 EF5 Fluent API 是否有人知道是否可以在数据库中有一个二进制列,但在 C# 中是否有一个长列?当我们在实体中放置一个 long 时,我们总是会在运行时出现 EF 错误(无法执行映射)。如果我们放置一个 byte[] 则一切正常(db 中的二进制通常意味着 .NET 代码中的 byte[] 类型)。我们无法更改数据库列类型,因此这不是解决方案。
这是我们最终要做的事情:
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 是 long(而不是 byte[])并且对于 DbId 也是如此,那么我们就不必执行所有这些冗余代码。因此这是不可能的,EF 在运行时抱怨(因为 db 列类型是二进制的)。但是 SQL Server 处理从二进制到 bigint 的隐式转换......