C# EF4如何清除DbContext内部状态?
如何让EF4 DbContext清除其内部缓存/状态 我有一个数据库更新程序,它通过EF4在事务中对各种表执行大量插入。我发现,随着更新的进行,对公共权限表的插入越来越慢 存在以下制约因素: 1) 每件事都必须发生在一个(巨大的)事务中 2) 无法引入对MSDTC的依赖-因此我无法进行交叉连接事务 3) 似乎无法为已打开的SqlConnection打开新的DbContext-遇到“EntityConnection只能使用关闭的DbConnection构造”错误。(请注意,我已经在多个DbContext之间共享了一个SqlConnection,但只有在它们全部初始化后才打开连接) 鉴于这些限制,我无法为每个工作块创建新的DbContext,因为它会破坏事务 我已经满足了这些功能限制,但是性能很差。我怀疑DbContext正在努力处理插入DbSet的数据量C# EF4如何清除DbContext内部状态?,c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,如何让EF4 DbContext清除其内部缓存/状态 我有一个数据库更新程序,它通过EF4在事务中对各种表执行大量插入。我发现,随着更新的进行,对公共权限表的插入越来越慢 存在以下制约因素: 1) 每件事都必须发生在一个(巨大的)事务中 2) 无法引入对MSDTC的依赖-因此我无法进行交叉连接事务 3) 似乎无法为已打开的SqlConnection打开新的DbContext-遇到“EntityConnection只能使用关闭的DbConnection构造”错误。(请注意,我已经在多个DbCont
如何告诉DbContext重置其内部缓存(例如,我最近插入的行,不再关心了)?IIRC,如果您:
myDbcontext.Configuration.AutoDetectChangesEnabled = false;
myDbcontext.Configuration.ValidateOnSaveEnabled = false;
也许读一读这本书会更好:
我可能会放弃EF,转而使用SqlBulkCopy进行巨大的插入。相关部分在这里:在应用程序中,您可以使用实体框架的组合来读取数据和执行小型插入和更新,并使用ADO.NET DataAdapters进行批量插入和更新
或者,您可以使用EF5的ExecuteSQLCommand结合存储过程执行插入,并传递表参数以传递批量数据。在EF4中,它的ExecuteStoreCommand感谢spender,我们实际上已经将其转移到原始SQL,并获得了巨大的性能提升,并且很可能会解决这个问题。谢谢你的提示。谢谢carbo,这就是我们所做的,谢谢你的建议。