私のモデル クラス OwnedModule には、Guid として OwnerID があります。
OwnedModule とその OwnerName からの同じ Guid 値を含む BusinessUnit と呼ばれる別のモデル クラスがあります。
ハードウェアに関するすべての詳細が含まれていますが、名前ではなく Guid 値として所有者が含まれている OwnedModule の詳細を表示したいため、ビュー モデルを作成しました。
public class OwnedModuleViewModel
{
public long Id { get; set; }
public string ModuleId { get; set; }
public string TypeName { get; set; }
public string KindName { get; set; }
public string Owner { get; set; }
public DateTime OwnershipStart { get; set; }
}
public class IndexOwnedModule
{
public List<OwnedModuleViewModel> OwnedModules { get; set; }
}
このすべての詳細をリポジトリに表示するには、次の機能があります
public IndexOwnedModule GetAllOwnedModules()
{
var modulesList = new IndexOwnedModule();
var modules = (_dbSis.OwnedModules.OrderBy(module => module.Id).Select(module => new OwnedModuleViewModel
{
Id = module.Id,
ModuleId = module.ModuleId,
TypeName = module.ModuleType.TypeName,
Owner = GetModuleOwner(module.ModuleOwnerId),//error here
OwnershipStart = module.Start
}));
modulesList.OwnedModules = modules.ToList();
return modulesList;
}
public string GetModuleOwner(Guid id)
{
var ownedModule =_dbSis.Set<BusinessUnit>().FirstOrDefault(t => t.Id == id);
if (ownedModule != null) return ownedModule.Name;
return null;
}
GUID の値をビューの所有者としてユーザーに表示するのは便利ではないため、GetModuleOwnerName を持っていた名前を取得したいと考えました。
しかし、ビューモデル ビューに所有者の名前を設定した方法が間違っているようで、アプリケーションを実行すると次のエラーが発生します。
LINQ to Entities はメソッド 'System.String GetModuleOwner(System.Guid)' メソッドを認識せず、このメソッドをストア式に変換できません。
所有者の値を設定した行にコメントすると( Owner = GetModuleOwner(module.ModuleOwnerId) )、すべて正常に機能します。