【问题标题】:Use projection to fill not mapped types in EF使用投影填充 EF 中未映射的类型
【发布时间】:2012-04-15 22:56:34
【问题描述】:

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

所以我们有一个实体:

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 执行 Measure 创建? (例如拦截等)

PS。创建 EF 复杂类型并对其进行映射不是一种选择!

谢谢恩拉

【问题讨论】:

    标签: c# entity-framework projection


    【解决方案1】:

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

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

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

    【讨论】:

    • 不能选择复杂类型,因为我们的类型是并且必须是结构。 Automapper 可能是一个解决方案,我必须澄清这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2012-06-17
    • 2021-12-17
    相关资源
    最近更新 更多