C# TryGetObjectByKey未在.net 4.5中编译

C# TryGetObjectByKey未在.net 4.5中编译,c#,.net,entity-framework,C#,.net,Entity Framework,我有下面的代码,它在保存.NET4/EF4项目中分离的对象方面做得非常好。我想在一个新的.NET4.5/EF5项目中使用该代码。我复制了它,现在它给了我一个编译错误: “MyEntities不包含'TryGetObjectByKey'的定义,并且找不到接受MyEntities类型的第一个参数的扩展方法'TryGetObjectByKey'(是否缺少using指令或程序集引用?) 据称,它位于引用的System.Data.Entity程序集(.dll)的System.Data.Objects命名空

我有下面的代码,它在保存.NET4/EF4项目中分离的对象方面做得非常好。我想在一个新的.NET4.5/EF5项目中使用该代码。我复制了它,现在它给了我一个编译错误:

“MyEntities不包含'TryGetObjectByKey'的定义,并且找不到接受MyEntities类型的第一个参数的扩展方法'TryGetObjectByKey'(是否缺少using指令或程序集引用?)

据称,它位于引用的System.Data.Entity程序集(.dll)的System.Data.Objects命名空间中(因此我有一个用于它的名称)

public bool UpdateChanged(IEntityWithKey DetachedObject = null) {
    bool Result = false;

    try {
        using (MyEntities db = new MyEntities()) {
            if (DetachedObject != null) {
                object Original = null;

                if (db.TryGetObjectByKey(DetachedObject.EntityKey, out Original))
                    db.ApplyCurrentValues(DetachedObject.EntityKey.EntitySetName, DetachedObject);
            } // if they want to Update an Entity

            db.SaveChanges();
            Result = true;
        } // using the database
    } catch (Exception e) {

    } // try-catch

    return Result;
} // UpdateChanged - Method
根据这一链接,它应该起作用:

你能帮忙吗

更新/解决方案:

根据@Rowan下面的回答,我简单地将我的Save方法修改为如下内容,而不是创建一个接受分离对象的UpdateChanged方法:

using (MyEntities db = new MyEntities()) {
    if (o.ID > 0) {
        // Existing Owner
        db.Owners.Attach(o);
        db.Entry(o).State = EntityState.Modified;
        db.Entry(o.Address).State = EntityState.Modified;
    } else {
        // New Owner
        db.Owners.Add(o);
    } // if this is a New Owner

    db.SaveChanges();
} // using the database

TryGetObjectByKey是ObjectContext上的一个方法。从VisualStudio2012开始,默认情况下,新模型将生成基于DbContext的上下文(DbContext被设计为更简单、更直观的API界面)。现有模型将继续生成ObjectContext,除非您选择切换到DbContext。您还可以为新型号提供支持


始终可以使用((IObjectContextAdapter)db.ObjectContext.TryGetObjectByKey(…)获取底层ObjectContext。

TryGetObjectByKey是ObjectContext上的一个方法。从VisualStudio2012开始,默认情况下,新模型将生成基于DbContext的上下文(DbContext被设计为更简单、更直观的API界面)。现有模型将继续生成ObjectContext,除非您选择切换到DbContext。您还可以为新型号提供支持


始终可以使用((IObjectContextAdapter)db获取底层ObjectContext。ObjectContext.TryGetObjectByKey(…)。

MyEntities
的子类
ObjectContext
MyEntities
(类型
db
)被视为第一个参数,所以这看起来像是一个扩展方法,为了让Brian的问题更清楚,MyEntities是从ObjectContext还是DbContext派生的?你能展示一下它的样子吗?@BrianRasmussen,MyEntities是从DbContext派生出来的。
MyEntities
ObjectContext
的子类吗?
MyEntities
(db的类型)被视为第一个参数,所以这看起来像是一个扩展方法,为了让Brian的问题更清楚,MyEntities是从ObjectContext还是DbContext派生的?你能展示一下它的样子吗?@BrianRasmussen,MyEntities是从DbContext派生出来的。谢谢你@Rowan,成功了。有了这个新的DbContext,有没有更好/不同的方法来连接断开连接的对象?谢谢@Rowan,这就成功了。有了这个新的DbContext,有没有更好/不同的方法来连接断开连接的对象?