【问题标题】:Getting POCO classes in DbContext Generator在 DbContext Generator 中获取 POCO 类
【发布时间】:2013-05-08 14:55:55
【问题描述】:

EF4.1中DbContext Generator生成的类是否被视为POCO和持久化无知?

如果是这样,为什么会出现错误: “无法在 LINQ to Entities 查询中构造实体或复杂类型 ''。”?

这是我的代码:

return searchParam = from p in ent.PartnerProfiles
                  select new PartnerProfile
                  { 
                      PartnerName =  p.PartnerName
                  }.ToList();

【问题讨论】:

    标签: entity-framework poco dbcontext


    【解决方案1】:

    是的,您可以将它们视为 POCO 并且不了解持久性,因为它们没有用于通知和跟踪来自 ObjectContext 生成器的类的更改的接线。

    也就是说,EF 需要一些条件才能启用延迟加载(virtual 导航属性),并且在真正持久的无知类中,您不会找到原始的主键或外键属性。后者不是必需的,但有时非常方便(参见foreign key associations)。

    您得到的错误是设计使然。它的原因没有很好的记录(据我所知),但它可能与 EF 只想跟踪它自己创建的实体,而不是你在投影中生成的实体有关。对于许多 EF 用户来说,这种差异并不明显。我描述了更多细节here

    【讨论】:

    • 谢谢格特。但是如果我想急切地加载一个关联的类,我该怎么做呢?使用 include 关键字对我不起作用,因为我需要在将其发送到业务层之前进行额外的过滤。
    • 这也是许多其他人遇到的麻烦事。在Include 中有一个启用过滤的更改请求,但我认为它不会在 EF 6 中被授予。有一些方法可以解决这个问题,但这将是一个不同的问题。请尝试在 SO 上找到有关此问题的问答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多