【问题标题】:How to tell if I use ObjectContext API or DbContext API?如何判断我使用的是 ObjectContext API 还是 DbContext API?
【发布时间】:2013-04-15 11:46:30
【问题描述】:

我有两个具有不同数据库模型的项目(尽管相同的实体框架版本 5.0.0)。

他们的查询如下所示:

项目一:

if (_db.Entry(customer).State == EntityState.Detached)

项目 2:

if (customer.EntityState == EntityState.Detached)

这些是不同之处,以及其他小事。

我如何知道每个项目正在使用哪个版本的实体框架(当 DLL 版本匹配时)?将“旧”版本更新为“新”模型版本是否有意义?有什么好处?

【问题讨论】:

    标签: c# entity-framework dbcontext objectcontext


    【解决方案1】:

    项目 1 使用 DbContext API,因为只有此上下文类型具有 Entry 方法。

    项目 2 最有可能将 ObjectContext 与派生自 EntityObject 的实体一起使用,Customer 从那里继承 EntityState。如果Customer 具有自定义EntityState 属性,则无法用您的单行进行区分。按 F12 两次 - 一次是在 customer 变量上,它会将您定向到声明,然后在该变量的类型(可能是 Customer)上查看类声明并检查它是否派生自 EntityObject。

    引用项目 2 中的 EF5 程序集这一事实毫无意义。它可能未在代码中使用,或者代码仅使用了一些辅助方法(如 Include 的 lambda 版本),但它似乎并未使用 DbContext 的所有核心功能。它将引用 .NET 框架程序集中的 EF 类(System.Data.Entity.dll 等)。

    升级项目 2 值得考虑,因为 EF 的所有新开发都遵循 POCO 方法(而不是 EntityObject 方法)。

    【讨论】:

    • 感谢您的解释。我是否需要删除旧的数据库模型并使用相同的(旧模型,但新的 DLL)项目 2 重新创建它?还是有一些“升级机制”?顺便说一句:customer 派生自 EntityObject。也就是说,它使用的是“旧”方式,不是吗?
    • @SeToY:是的,这是老办法。你能问一个关于升级的单独问题吗?我不确定最顺利的方法是什么,也不想给你带来麻烦。您还必须期待一些代码更改(例如,您问题中的行将不再有效,甚至可能更多)。在您的问题中加入尽可能多的信息(编译器版本、.NET 版本、EF 版本、DB 版本,如果您从现有的 DB 架构开始或首先使用模型等)
    猜你喜欢
    • 2012-04-07
    • 2020-10-18
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多