【问题标题】:auto projection in entity framework实体框架中的自动投影
【发布时间】:2012-02-23 11:09:56
【问题描述】:

是否有在实体框架中创建自动投影?请看:

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> 
    }
}

有什么办法吗?我用谷歌搜索了它,但没有找到任何资源。可以指导一下吗?

【问题讨论】:

    标签: entity-framework c#-4.0 reflection extension-methods projection


    【解决方案1】:

    是的,可以将实体框架实体自动投影到某些 Dto。在此处查看其中一种实现https://gist.github.com/1367880

    您可以将其用作:

    context.Persons.Project().To<PersonNameModel>().ToList();
    

    在这种情况下,将生成 db 查询以仅选择所需的列(由 PersonNameModel 指定)。

    如果您只想映射查询结果(即检索到的对象),那么 EmitMapper 或 AutoMapper 应该是您的选择。

    【讨论】:

    • 很棒很棒很棒。非常感谢
    【解决方案2】:

    如果我正确理解你想要的是对象之间的映射,请使用 Automapper 它会为你做映射

    http://www.codeproject.com/Articles/61629/AutoMapper

    http://automapper.org/

    git hub 路径https://github.com/AutoMapper/AutoMapper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多