无论如何在实体框架中创建自动投影?请看:
public class Person{
public int Id {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public string FatherName {get; set;}
public string City {get; set;}
public string AddressLine {get; set;}
public string Something {get; set;}
}
public class PersonNameModel{
public string FirstName {get; set;}
public string LastName {get; set;}
public string FatherName {get; set;}
}
public class PersonAddressModel{
public string City {get; set;}
public string AddressLine {get; set;}
}
// etc...
我的意思是我可以替换正常投影,如:
context.Persons.Select(t => new PersonNameModel{ FirstName = t.FirstName /* etc */ });
使用反射并创建自动投影的扩展方法,如:
public static class MyExtensions{
public static IQueryable<T> AutoSelect<T, TProject>(this IQueryable<T> q){
// read TProject type in reflection
// create a projection as a IQueryable<T>
}
}
有什么办法吗?我用谷歌搜索,但没有找到任何资源。你能指导我吗?
答案 0 :(得分:1)
是的,可以将实体框架实体自动投影到某些Dto。请参阅此处的一个实施https://gist.github.com/1367880
您可以将其用作:
context.Persons.Project().To<PersonNameModel>().ToList();
在这种情况下,将生成db查询以仅选择必需的列(由PersonNameModel指定)。
如果您只想映射查询结果(检索到的对象),那么EmitMapper或AutoMapper应该是您的选择。
答案 1 :(得分:0)
如果我理解你想要的是对象之间的映射,使用Automapper它会为你做映射
http://www.codeproject.com/Articles/61629/AutoMapper
git hub path https://github.com/AutoMapper/AutoMapper