使用投影填充EF中未映射的类型

时间:2012-04-02 09:18:30

标签: c# entity-framework projection

我们有一个名为Measure的特定结构,我们想使用这种类型而不是数据库字段类型,例如双

所以我们有一个实体:

public class MyEnity
{
   public int MyValue { get; set; }
}

我们有一个转移对象: 公共课MyDto {    public Measure MyMeasureValue {get;组; } }

如果属性类型匹配,我们只需填写每个投影的dto:

enities.Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) });

但由于EF不支持此类陈述,我们必须重新填写,或加载整个实体:

entities.Select(i => new { MyValue = i.MyValue })
        .AsEnumerable()
        .Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) } );

我们希望在重新填充过程中多次避免这种循环,特别是因为要填充许多属性。有没有办法我们可以使用第一个语句并教EF执行Measure创建? (例如拦截等)

PS。创建EF复杂类型并映射它不是一个选项!

感谢Enyra

1 个答案:

答案 0 :(得分:0)

您可以在使用Linq-Entity获取实体的某些属性时使用复杂类型。例如;

Model1Container container = new Model1Container();
var temp = from o in container.MasterSet
           select new
                  {
                       x = o.LastModifiedBy,
                       y = o.LastModifiedDate
                  };

顺便说一下,不要手动映射DTOS,最好使用autommaper。它具有映射匹配专有名称而无需明确声明的功能。