我有以下代码可以很好地保存 .Net 4 / EF 4 项目中的分离对象。我想在新的 .Net 4.5 / EF 5 项目中使用该代码。我复制了它,现在它给了我一个编译错误:
“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
根据此链接,它应该可以工作:http: //msdn.microsoft.com/en-us/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