【问题标题】:The entity or > complex type 'ChildAccessory' cannot be constructed in a LINQ to > Entities query无法在 LINQ to > 实体查询中构造实体或 > 复杂类型“ChildAccessory”
【发布时间】:2019-11-11 09:17:52
【问题描述】:

我想我理解以下错误,但我不知道如何解决它,

"ClassName": "System.NotSupportedException", "Message": "实体或 无法在 LINQ 中构造复杂类型“ChildAccessory”以 实体查询。",

我应该创建一个 DTO 并从存储库中返回它来解决问题还是有更好的解决方法?

我正在尝试获取子配件,但也包括父表中的默认配件。

public class ChildAccessoryRepository: IChildAccessoryRepository {
 private readonly EquipmentContext _context;

 public DirectoryEquipmentRepository(EquipmentContext context) {
  _context = context;
 }

 public IEnumerable < ChildAccessory > GetChildAccessories(Guid clientReference) {
  var accessories = from a in _context.Accessory
  join ca in _context.ChildAccessory
  on new {
   AccessoryId = a.Id, ClientReference = clientReference
  }
  equals new {
   ca.AccessoryId, ca.ClientReference
  }
  into ca_join
  from ca in ca_join.DefaultIfEmpty()
  where
  ca.IsActive == true ||
   ca.IsActive == null
  //select ca;
                         select new ChildAccessory
                                   {
                                       AccessoryId = ca.AccessoryId,
                                       SomeOtherColumn = ca.SomeOtherColumn,
                                       Accessory = ca.Accessory,
                                   });

 }
}

【问题讨论】:

    标签: c# entity-framework linq entity-framework-6


    【解决方案1】:

    ChildAccessory 有无参数构造函数吗?

    【讨论】:

    • 不允许映射到在 EF 中用作表的类型。 ChildAccessory 可能已经是上下文中的一个表。 EF 会阻止您执行此操作,因为您可能会从数据库中获取可能无法跟踪的对象。您可以在选择之后添加一个.AsNoTracking(),或者您可以映射到匿名对象,然后执行一个.ToList,然后在.ToList 之后映射到ChildAccessory。我在这里找到了这些选项:stackoverflow.com/questions/5325797/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2016-10-11
    • 2017-05-31
    • 2015-02-06
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多