Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 细颗粒积垢与亚音速的SimpleRepository_C#_.net_Subsonic_Simplerepository - Fatal编程技术网

C# 细颗粒积垢与亚音速的SimpleRepository

C# 细颗粒积垢与亚音速的SimpleRepository,c#,.net,subsonic,simplerepository,C#,.net,Subsonic,Simplerepository,假设我的C应用程序中有一个TestClass,它的属性为a和B。 我用我的代码改变了B的值,我保持属性A不变。 我使用SimpleRepository的更新方法更新数据库中的TestClass 正如我看到的,它还更新了数据库中的属性值 测试很容易:我“手动”在我的应用程序外更改数据库中的值A,然后从我的应用程序进行更新。属性A的值根据我的应用程序中TestClass的状态更改回其值 那么,我的问题是:是否可以通过SimpleRepository只更新某些属性,而不更新整个类?是否存在一些“Ign

假设我的C应用程序中有一个TestClass,它的属性为a和B。 我用我的代码改变了B的值,我保持属性A不变。 我使用SimpleRepository的更新方法更新数据库中的TestClass

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

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

那么,我的问题是:是否可以通过SimpleRepository只更新某些属性,而不更新整个类?是否存在一些“IgnoreFields”的可能性?

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

那么,让我们假设在您的示例中,我选择了一些数据,A和B的值分别为1和2。现在让我们假设我想更新B,下面的语句只是一个示例:

UPDATE TestClass SET B = '3' WHERE Id = 1;
但是,与其因为没有并发而运行该语句,不如运行以下语句:

UPDATE TestClass SET B = '3' WHERE Id = 1 AND A = '1' AND B = '2';
这一声明现在确保了记录没有被任何人改变

然而,目前看来亚音速的SimpleRepository并不支持任何类型的并发,因此这将是一个重大的失败。如果您正在寻找一个非常直接的存储库库,在那里您可以使用POCO,我建议您使用Dapper。实际上,Stackoverflow使用的是Dapper。它的速度非常快,并且很容易让您在update语句中构建并发性,因为您发送参数化SQL语句,非常简单

这是一篇关于如何在所有CRUD操作中使用Dapper的全面文章。 这显示了如何使用Dapper执行插入和更新。
注意:使用Dapper,您实际上也可以做您想做的事情,因为您发送了基本的SQL语句,但我不建议您不要使用并发。

在这种情况下,不要调用DataObject上的update方法,您基本上是指对象已经更改,需要在DB中更新。 所以亚音速将生成如下查询

UPDATE TestClass SET A ='', B='', ModifiedOn = 'DateHere' WHERE PrimaryKey = ID
要仅更改属性B,需要手动构造更新查询。 看看亚音速。更新类。 理想情况下,您不应该手动形成数据对象的新实例,如果这样做,请确保 这些值是从亚音速返回的对象复制的。选择“查询”。 因此,当您仅更新一个属性的值时,所有其他属性都将保留其自身的DB值,而不是取决于属性类型的默认值