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 错误地删除了我的联合中的字段?
LINQ to SQL 可以查询 XML 字段 DB-serverside 吗?
为 linq to sql 更新 SQL Compact db 和 dbml 时出现 Method not Found 错误