【发布时间】:2014-06-12 20:20:48
【问题描述】:
使用 Entity Framework 6,我在类中包含的模型对象和视图模型对象之间具有映射函数,如下所示:
public class DataMappers
{
public static Expression<Func<Data.Models.Employer, EmployerViewModel>> EmployerMapper = (e => new EmployerViewModel()
{
Name = e.Name,
Location = e.Location
....
});
}
然后我可以像这样在多个地方调用:
results = db.Employers.OrderBy(e => e.Name)
.Select(DataMappers.EmployerMapper)
.ToList();
这将生成一条仅包含我需要的列的 SQL 语句。我的问题是,如果其他表引用我的“雇主”表,是否可以重用它?即
public static Expression<Func<Data.Models.Person, PersonViewModel>> Person = (p => new PersonViewModel()
{
FirstName = p.FirstName,
LastName = p.LastName,
Employer = *use the 'EmployerMapper' expression above on p.Employer*
....
});
可以做到吗,或者我需要在这种情况下复制映射代码吗?
在第二个示例中,我尝试将它用作 Func 而不是 Expression<Func>,这将编译 (Employer = EmployerMapper(p.Employer)),但是,您会在运行时收到 The LINQ expression node type 'Invoke' is not supported in LINQ to Entities 异常。
【问题讨论】:
标签: c# linq entity-framework entity-framework-6