繁体   English   中英

TryGetObjectByKey无法在.net 4.5中编译

[英]TryGetObjectByKey not compiling in .net 4.5

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

“ MyEntities不包含'TryGetObjectByKey'的定义,并且找不到扩展方法'TryGetObjectByKey'接受类型为MyEntities的第一个参数(您是否缺少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

根据此链接,它应该起作用: http : //msdn.microsoft.com/zh-cn/library/bb738728.aspx

你能帮忙吗?

更新/解决方案:

基于下面的@Rowan的答案,我只是将Save方法修改为类似于以下内容,而不是创建采用Detached对象的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上的方法。 从Visual Studio 2012开始,默认情况下,新模型将生成基于DbContext的上下文(DbContext被设计为更简单,更直观的API表面)。 除非您选择交换到DbContext,否则现有模型将继续生成ObjectContext。 您还可以恢复到新模型的ObjectContext

您始终可以使用((IObjectContextAdapter)db).ObjectContext.TryGetObjectByKey(...)来获取基础ObjectContext。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM