Linq to Sql-我可以构建一个通用的更新操作吗?

Posted

技术标签:

【中文标题】Linq to Sql-我可以构建一个通用的更新操作吗?【英文标题】:Linq to Sql- Can I build an generic Action of Update? 【发布时间】:2013-04-04 19:28:06 【问题描述】:

对于我的每个表都有 Key 值,所以我的问题是如何获取 Key 属性? 我想搜索我在参数中得到的那个对象,并通过这个更新的对象更新表格。如何从表格中找到我的对象?

public static void Update<TEntity>(TEntity UpdatedObject) where TEntity : class
        
            DatabaseLinqDataContext ClientLinq = new DatabaseLinqDataContext(Patch);
            ClientLinq.GetTable<TEntity>()// I want to search that object i got in the paramater and update it. how do I find my object from the table?
            ClientLinq.SubmitChanges();
        

有什么想法吗?解决这个问题的正确方法是什么?

这个动作写在业务逻辑层中。

【问题讨论】:

为什么要重建默认的 linq-to-sql 行为? 【参考方案1】:

有几种情况需要考虑。

如果实体实例之前已被此数据上下文加载,只需调用 SubmitChanges。无需执行任何其他操作(此时将更新所有修改的实例)。

如果实体实例之前是由不同的数据上下文加载的,则需要制作一个不会被跟踪的新副本,然后按照下一个案例。

如果实体实例不是由数据上下文加载的(或实例是上面的副本),那么您需要调用

  //attach the changes to the tracked object graph
dataContext.GetTable<T>().Attach(t, true);
  //if type uses optimistic concurrency, then you need to refresh
  //load the "original" state for the tracked object graph
dataContext.Refresh(t, RefreshMode.KeepCurrentValues);
dataContext.SubmitChanges();

或者,最好调用:

dataContext.GetTable<T>().Attach(tChanged, tOriginal);
dataContext.SubmitChanges();

【讨论】:

谢谢,但是附件是做什么的?更新数据库中的对象?

以上是关于Linq to Sql-我可以构建一个通用的更新操作吗?的主要内容,如果未能解决你的问题,请参考以下文章

Linq-To-Sql ORM 更新一对多

为啥 Linq-to-sql 错误地删除了我的联合中的字段?

LINQ to SQL 可以查询 XML 字段 DB-serverside 吗?

LINQ to SQL 关系不更新集合

为 linq to sql 更新 SQL Compact db 和 dbml 时出现 Method not Found 错误

构建一个简单的 linq to sql