Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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# EF 6:在调用context.Database.ExecuteSqlCommand(…)后更新DBSet/Entities_C#_Sql Server_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# EF 6:在调用context.Database.ExecuteSqlCommand(…)后更新DBSet/Entities

C# EF 6:在调用context.Database.ExecuteSqlCommand(…)后更新DBSet/Entities,c#,sql-server,entity-framework,entity-framework-6,C#,Sql Server,Entity Framework,Entity Framework 6,在我的项目中,我目前正在使用 context.DbSet<Table>.RemoveRange(…); context.SaveChanges(); 希望这种替代方法能更快 我的问题是,在执行命令后,让本地数据库集/实体与数据库上的内容恢复同步的最佳(最省时)方法是什么?来自文档: DbSet.SqlQuery(String,Object[])方法将跟踪,请参见 或者您可以使用SQLRAW中的fromfrom 使用FromSqlRaw或FromSqlInterpolated方法

在我的项目中,我目前正在使用

context.DbSet<Table>.RemoveRange(…);
context.SaveChanges(); 

希望这种替代方法能更快

我的问题是,在执行命令后,让本地数据库集/实体与数据库上的内容恢复同步的最佳(最省时)方法是什么?

来自文档:

DbSet.SqlQuery(String,Object[])方法将跟踪,请参见

或者您可以使用SQLRAW中的
from
from

使用FromSqlRaw或FromSqlInterpolated方法的查询遵循与EF Core中任何其他LINQ查询完全相同的更改跟踪规则。例如,如果查询项目为实体类型,则默认情况下将跟踪结果

我不明白为什么在以这种方式执行删除操作后简单地重新查询上下文是行不通的。

来自文档:

DbSet.SqlQuery(String,Object[])方法将跟踪,请参见

或者您可以使用SQLRAW中的
from
from

使用FromSqlRaw或FromSqlInterpolated方法的查询遵循与EF Core中任何其他LINQ查询完全相同的更改跟踪规则。例如,如果查询项目为实体类型,则默认情况下将跟踪结果



我不明白为什么在以这种方式执行删除操作后简单地重新查询上下文是行不通的。

两次删除之间的时间差是什么?Savechanges将查看数据集中的每一行,并验证是否设置了更改位。第二种方法不会检查每一行。而是只发送更改的行。因此,如果您的数据集有很多行,那么查找更改的项将花费更多的时间。@jdweng,我还没有时差。目前我只知道
SaveChanges
花费的时间太长了。因此,我正在研究另一种方法,但首先想知道如何重新同步我的数据库集等。数据集有一点指示更改的行。因此,重新同步是检查更改的位。在多用户数据库中,重新同步的唯一方法是读取所有内容或具有时间戳,因此您只需更新上次读取时更改的项目。由于另一个用户可能更改了数据,因此写入更为复杂。如果数据库显示有10项库存,而你需要8项,而另一个用户拿出5项,那么你将短缺3项。@jdweng,那么我用什么代码来读取所有内容呢。是否使用DbSet.Load()?两次删除之间的时间差是多少?Savechanges将查看数据集中的每一行,并验证是否设置了更改位。第二种方法不会检查每一行。而是只发送更改的行。因此,如果您的数据集有很多行,那么查找更改的项将花费更多的时间。@jdweng,我还没有时差。目前我只知道
SaveChanges
花费的时间太长了。因此,我正在研究另一种方法,但首先想知道如何重新同步我的数据库集等。数据集有一点指示更改的行。因此,重新同步是检查更改的位。在多用户数据库中,重新同步的唯一方法是读取所有内容或具有时间戳,因此您只需更新上次读取时更改的项目。由于另一个用户可能更改了数据,因此写入更为复杂。如果数据库显示有10项库存,而你需要8项,而另一个用户拿出5项,那么你将短缺3项。@jdweng,那么我用什么代码来读取所有内容呢。我是否使用DbSet.Load()?您好,我使用的是EF 6而不是EF Core,因此我认为您的评论不适用。EF 6在本文的原始标题中,但有人对其进行了有益的编辑。尽管EF6有DbSet.SqlQuery(…)方法,但我正在删除项,因此我不确定此API返回了什么?被删除的项目?您试图解决的实际问题是什么?您是否正在创建一个延迟加载的实体集,然后手动调用SQL delete并希望它刷新?你不能创建一个新的EF查询,它会忽略已删除的项目吗?或者它不是在刷新吗?嗨,我的实体最初都是在本地显式加载的,以提高速度。用户进行一些选择以删除某些选项。使用RemoveRange和SaveChanges花费的时间太长。因此,我想以另一种(希望)更快的方式从数据库中删除项目。因此,执行ExecuteSQLCommand。但是,我需要本地DbSet来反映数据库上发生的删除,因此我的DbSet和数据库是同步的。我怎么能做到这一点呢?嗨,我使用的是EF 6而不是EF Core,所以我认为你的评论不适用。EF 6在这篇文章的原始标题中,但有人对其进行了有益的编辑。尽管EF6有DbSet.SqlQuery(…)方法,但我正在删除项,所以我不确定该API返回了什么?被删除的项目?您试图解决的实际问题是什么?您是否正在创建一个延迟加载的实体集,然后手动调用SQL delete并希望它刷新?你不能创建一个新的EF查询,它会忽略已删除的项目吗?或者它不是在刷新吗?嗨,我的实体最初都是在本地显式加载的,以提高速度。用户进行一些选择以删除某些选项。使用RemoveRange和SaveChanges花费的时间太长。因此,我想以另一种(希望)更快的方式从数据库中删除项目。因此,执行ExecuteSQLCommand。但是,我需要本地DbSet来反映数据库上发生的删除,因此我的DbSet和数据库是同步的。我怎样才能做到这一点?
context.Database.ExecuteSQLCommand(<SQL to remove items>)