【发布时间】:2012-09-28 20:04:14
【问题描述】:
我有以下代码可以很好地保存 .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
【问题讨论】:
-
MyEntities是ObjectContext的子类吗? -
MyEntities(db的类型)被视为第一个参数,所以这看起来像是你在某个地方找到的扩展方法。 -
为了让Brian 的问题更清楚——MyEntities 是派生自ObjectContext 还是DbContext?你能展示一下它的样子吗?
-
@BrianRasmussen,MyEntities 派生自 DbContext。
标签: c# .net entity-framework