Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# EF4如何清除DbContext内部状态?_C#_Entity Framework_Dbcontext - Fatal编程技术网

C# EF4如何清除DbContext内部状态?

C# EF4如何清除DbContext内部状态?,c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,如何让EF4 DbContext清除其内部缓存/状态 我有一个数据库更新程序,它通过EF4在事务中对各种表执行大量插入。我发现,随着更新的进行,对公共权限表的插入越来越慢 存在以下制约因素: 1) 每件事都必须发生在一个(巨大的)事务中 2) 无法引入对MSDTC的依赖-因此我无法进行交叉连接事务 3) 似乎无法为已打开的SqlConnection打开新的DbContext-遇到“EntityConnection只能使用关闭的DbConnection构造”错误。(请注意,我已经在多个DbCont

如何让EF4 DbContext清除其内部缓存/状态

我有一个数据库更新程序,它通过EF4在事务中对各种表执行大量插入。我发现,随着更新的进行,对公共权限表的插入越来越慢

存在以下制约因素:

1) 每件事都必须发生在一个(巨大的)事务中

2) 无法引入对MSDTC的依赖-因此我无法进行交叉连接事务

3) 似乎无法为已打开的SqlConnection打开新的DbContext-遇到“EntityConnection只能使用关闭的DbConnection构造”错误。(请注意,我已经在多个DbContext之间共享了一个SqlConnection,但只有在它们全部初始化后才打开连接)

鉴于这些限制,我无法为每个工作块创建新的DbContext,因为它会破坏事务

我已经满足了这些功能限制,但是性能很差。我怀疑DbContext正在努力处理插入DbSet的数据量


如何告诉DbContext重置其内部缓存(例如,我最近插入的行,不再关心了)?

IIRC,如果您:

myDbcontext.Configuration.AutoDetectChangesEnabled = false;
myDbcontext.Configuration.ValidateOnSaveEnabled = false;
也许读一读这本书会更好:


我可能会放弃EF,转而使用SqlBulkCopy进行巨大的插入。相关部分在这里:

在应用程序中,您可以使用实体框架的组合来读取数据和执行小型插入和更新,并使用ADO.NET DataAdapters进行批量插入和更新


或者,您可以使用EF5的ExecuteSQLCommand结合存储过程执行插入,并传递表参数以传递批量数据。在EF4中,它的ExecuteStoreCommand

感谢spender,我们实际上已经将其转移到原始SQL,并获得了巨大的性能提升,并且很可能会解决这个问题。谢谢你的提示。谢谢carbo,这就是我们所做的,谢谢你的建议。