首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚音速SimpleRepository细粒碎屑

亚音速SimpleRepository细粒碎屑
EN

Stack Overflow用户
提问于 2012-09-12 11:05:39
回答 1查看 690关注 0票数 0

假设我的TestClass在我的C#应用程序中,带有属性A和property B。通过代码更改B的值,使属性A保持不变。我使用SimpleRepository的更新方法更新数据库中的TestClass。

正如我所看到的,它还更新数据库中的属性A值。

测试很容易:我在应用程序之外的数据库中更改值A (“手动”),然后从我的应用程序中进行更新。属性的值--根据我的应用程序中的TestClass状态更改回它的值。

所以,我的问题是:是否可以只对某些属性进行更新,而不是通过SimpleRepository对整个类进行更新?有一些“IgnoreFields”的可能性吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-12 11:19:04

您需要的是optimistic concurrency对您的UPDATE语句,而不是排除某些字段。简而言之,这意味着在更新表时,会在UPDATE语句中追加一个UPDATE子句,以确保行中字段的值实际上与上一次运行SELECT时的值相同。

因此,让我们假设在您的示例中,我选择了一些数据,AB的值分别是12。现在让我们假设我想更新B (下面的语句只是一个例子):

代码语言:javascript
复制
UPDATE TestClass SET B = '3' WHERE Id = 1;

但是,与其运行该语句(因为那里没有并发性),不如运行以下语句:

代码语言:javascript
复制
UPDATE TestClass SET B = '3' WHERE Id = 1 AND A = '1' AND B = '2';

这份声明现在确保了记录没有被任何人改变。

然而,目前看来,Subsonic的SimpleRepository不支持任何类型的并发,因此这将是一次重大的失败。如果您正在寻找一个非常直接的存储库,您可以在其中使用POCO,我推荐Dapper。实际上,Stackoverflow使用了Dapper。它是非常快的,可以轻松地将并发性构建到update语句中,因为您发送了参数化的SQL语句,非常简单。

  1. 这个Stackoverflow article是一篇关于如何在所有CRUD操作中使用Dapper的整体文章。
  2. Stackoverflow article演示如何使用Dapper执行插入和更新。

注意:使用Dapper的实际上也可以做您想做的事情,因为您发送了基本的SQL语句,但我只是不建议不要使用并发性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12386761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档