EF5 Fluent API を使用すると、データベースにバイナリ列があり、C# に long がある可能性があるかどうかは誰にもわかりませんか? エンティティに 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 への暗黙的な変換を処理します...