2012-04-02 60 views
1

我们有一个特定的结构称为措施,我们希望改为使用这种类型的数据库字段类型如的双。使用投影来填补未映射类型的EF

所以我们有一个实体:

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

我们有一个传输对象: 公共类MyDto { 公共措施MyMeasureValue {获得;组; } }

如果属性类型将匹配,我们就可以填补我们的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执行度量创建吗? (例如拦截等)

PS。创建EF复合类型并映射它不是一种选择!

感谢Enyra

回答

0

而获取使用LINQ实体的实体的一些属性你可以使用复杂类型。例如;

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

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

+0

COMPLEXE类型是没办法,因为我们的类型,并必须有一个结构。 Automapper可能是一个解决方案,我必须澄清这一点。 – Enyra 2012-04-02 11:08:06