私のプロジェクトでは、多くのエンティティで使用されているGenericImageViewModelがあります。 ASPのユーザエンティティを取得するLINQからの暗黙のViewModel生成?
例:
var query = UserRepository.Get(Id).Select(a => new TRDIdenityViewModel
{
FirstName = a.UserProfile.FirstName,
LastName = a.UserProfile.LastName,
NickName = a.UserProfile.NickName,
ProfileImage = a.UserProfile.ProfileImage
});
ProfileImageはGenericImageViewModelで、次のように暗黙の演算子を持っています
public static implicit operator TRDGenericImageViewModel(TRDImage image)
{
return new TRDGenericImageViewModel
{
Id = image.Id,
AspectRatio = image.Ratio,
Url = image.Url,
};
}
私はEntity Frameworkの例外をスロークエリを実行する場合:
"'TRDImage'タイプを 'TRDGenericImageViewModel'にキャストできませんLINQ to Entitiesはca EDMプリミティブ型または列挙型を指しています。
私はそれぞれのViewModelすべてがうまく動作しているため、手動でGenericImageViewModelを作成する場合:
var query = UserRepository.Get(Id).Select(a => new TRDIdenityViewModel
{
FirstName = a.UserProfile.FirstName,
LastName = a.UserProfile.LastName,
NickName = a.UserProfile.NickName,
ProfileImage = new TRDGenericImageViewModel {
Id = a.UserProfile.ProfileImage.Id,
AspectRatio = a.UserProfile.ProfileImage.Ratio,
Url = a.UserProfile.ProfileImage.Url,
},
});
をしかし、この場合には、私はそれが行くべき道を、すべてのViewModelにTRDGenericImageViewModel世代をコピー&ペーストする必要はないthatsの。何かが変更された場合は、関連するすべてのクラスを変更する必要があります。
この例外を回避する方法はありますか?
これを回避するには、カスタムViewModelクラスインスタンスを作成するラムダの前に '.AsEnumerable()'を使用します。 – Dai
'.AsEnumerable()'を使う前に、lambdaはデータベースから実体を取り出します。したがって、基本クエリーに含まれていない関連エンティティに対して 'Count() 'することはできません。 – creality
あなたの投稿は「Count」の呼び出しを示していません – Dai