Мне очень нравится Linq to SQL с функцией Lazy load. И в моем проекте я использовал AutoMapper для сопоставления модели DB Model с моделью домена (от DB_RoleInfo
до DO_RoleInfo
). В моем коде репозитория, как показано ниже:
public DO_RoleInfo SelectByKey(Guid Key)
{
return SelectAll().Where(x => x.Id == Key).SingleOrDefault();
}
public IQueryable<DO_RoleInfo> SelectAll()
{
Mapper.CreateMap<DB_RoleInfo, DO_RoleInfo>();
return from role in _ctx.DB_RoleInfo
select Mapper.Map<DB_RoleInfo, DO_RoleInfo>(role);
}
SelectAll
метод работает хорошо, но когда я вызываю SelectByKey
, я получаю ошибку:
Метод "RealMVC.Data.DO_RoleInfo MapDB_RoleInfo, DO_RoleInfo" не может перевести на SQL.
Это то, что Automapper полностью не поддерживает Linq?
Вместо Automapper я попробовал код отображения вручную ниже:
public IQueryable<DO_RoleInfo> SelectAll()
{
return from role in _ctx.DB_RoleInfo
select new DO_RoleInfo
{
Id = role.id,
name = role.name,
code = role.code
};
}
Этот метод работает так, как я хочу.