首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从EF 6.1.3更新到EF 6.2.0原因无法访问已释放的对象错误

从EF 6.1.3更新到EF 6.2.0原因无法访问已释放的对象错误
EN

Stack Overflow用户
提问于 2017-11-16 12:18:20
回答 2查看 3.4K关注 0票数 13

我和SQLite一起工作。我能够在我的WPF应用程序中使用实体框架6.1.3,没有问题,但是当我将它更新到6.2.0时,我会得到以下错误:

代码语言:javascript
复制
Test method DataAccessLayerTests.GenericDataRepositoryTests.CRUD_On_Pipe threw exception: 
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'SQLiteConnection'.
    at System.Data.SQLite.SQLiteConnection.CheckDisposed()
   at System.Data.SQLite.SQLiteConnection.get_State()
   at System.Data.Entity.Internal.RepositoryBase.CreateConnection()
   at System.Data.Entity.Migrations.History.HistoryRepository.QueryExists(String contextKey)
   at System.Data.Entity.Migrations.History.HistoryRepository.Exists(String contextKey)
   at System.Data.Entity.Migrations.History.HistoryRepository.GetPendingMigrations(IEnumerable`1 localMigrations)
   at System.Data.Entity.Migrations.DbMigrator.GetPendingMigrations()
   at Core.DatabaseContext.CreateAndSeedIfNotExists`1.InitializeDatabase(T context) in C:\Users\roadrunner\propulsimcs\Propulsim\Core\DatabaseContext.cs:line 40
   at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf`1.<CreateInitializationAction>b__e()
   at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
   at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
   at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
   at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
   at System.Data.Entity.Internal.InternalContext.Initialize()
   at System.Data.Entity.Database.Initialize(Boolean force)
   at Core.DatabaseContext..ctor() in C:\Users\roadrunner\propulsimcs\Propulsim\Core\DatabaseContext.cs:line 114
   at DataAccessLayer.GenericDataRepository`1.GetAll(Expression`1[] navigationProperties) in C:\Users\roadrunner\propulsimcs\Propulsim\DataAccessLayer\GenericDataRepository.cs:line 16
   at DataAccessLayerTests.GenericDataRepositoryTests.CRUD_On_Pipe() in C:\Users\roadrunner\propulsimcs\Propulsim\DataAccessLayerTests\GenericDataRepositoryTests.cs:line 34




Debug Trace:
Native library pre-loader is trying to load native SQLite library "C:\Users\roadrunner\propulsimcs\Propulsim\DataAccessLayerTests\bin\Debug\x86\SQLite.Interop.dll"...

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-27 19:12:50

该问题是由RepositoryBase类中的更改和SQLiteConnection类对IDbConnection.State属性的不正确(IMO)实现引起的(在已释放对象上调用时抛出ObjectDisposedException而不是返回ConnectionState.Closed )。

这与#398:安装一瞥时代码第一次移动的NullReferenceException中的报道相同。根据状态,它已经在EF6存储库中修复了,但不幸的是,他们决定不提供修补程序,所以您必须等待v6.3。我已经报告了链接到这篇文章的SQLite问题,希望他们能改变主意。

另一种选择是将问题报告给SQLite开发,然后等待修复。在这两种情况下,您都必须等待SQLite或EF6端的修复。请注意,即使使用标准的MigrateDatabaseToLatestVersion初始化程序,问题也是可重复的。

通过使用以下丑陋的反射黑客,我能够解决这个问题:

代码语言:javascript
复制
public override void InitializeDatabase(T context)
{
    base.InitializeDatabase(context);

    var _historyRepository = migrator.GetType().GetField("_historyRepository", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(migrator);
    var _existingConnection = _historyRepository.GetType().BaseType.GetField("_existingConnection", BindingFlags.Instance | BindingFlags.NonPublic);
    _existingConnection.SetValue(_historyRepository, null);

    var x = migrator.GetPendingMigrations();
    if (x.Any())
    {
        migrator.Update();
        Seed(context);
    }
}

原来的异常已经消失,但现在我又收到了一个这样的说法:“没有找到提供者'System.Data.SQLite‘的MigrationSqlGenerator。使用目标迁移配置类中的SetSqlGenerator方法注册额外的SetSqlGenerator。‘我认为这与缺乏MigrationSqlGenerator在SQLite EF服务有关的另一个问题。这可能是一个问题,也可能不是一个问题,取决于你如何在6.1.3中解决这个问题。

无论如何,我不建议使用上述黑客。要么等待狐狸修正,要么暂时将评级降至6.1.3。

票数 10
EN

Stack Overflow用户

发布于 2017-11-28 09:02:13

也影响到GlimpseDB的问题是固定的:https://github.com/aspnet/EntityFramework6/pull/405

现在就等着释放。

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

https://stackoverflow.com/questions/47329496

复制
相关文章

相似问题

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