gpt4 book ai didi

entity-framework - Entity Framework 4.1 "Code First"SetInitializer 在 Database.Delete 之后不再被调用

转载 作者:行者123 更新时间:2023-12-04 14:05:51 25 4
gpt4 key购买 nike

尝试首先使用 EF 4.1 代码进行一些单元测试。我有我的实时数据库(SQL Server)和我的单元测试数据库(Sql CE)。在与 EF、Sql CE 4.0 和事务支持战斗(并失败)后,我决定运行测试的最简单方法是:

  • 创建数据库
  • 运行测试
  • 删除数据库
  • 冲洗并重复

  • 我有我的 [Setup] 和 [TearDown] 功能:
    [SetUp]
    public void Init()
    {
    System.Data.Entity.Database.SetInitializer(new MyTestContextInitializer());
    _dbContext = ContainerFactory.Container.GetInstance<IContext>();
    _testConnection = _dbContext.ConnectionString;
    }

    [TearDown]
    public void Cleanup()
    {
    _dbContext.Dispose();
    System.Data.Entity.Database.Delete(_testConnection);
    }

    问题是 System.Data.Entity.Database.SetInitializer 在第一次测试后没有调用 MyTestContextInitializer。

    因此第二个测试然后失败:

    System.Data.EntityException : The underlying provider failed on Open.
    ----> System.Data.SqlServerCe.SqlCeException : The database file cannot be found. Check the path to the database



    任何指针的 TIA

    最佳答案

    我通过手动调用“InitializeDatabase”来解决这个问题。像这样:

       [SetUp]
    public void Init()
    {

    var initializer = new MyTestContextInitializer();
    System.Data.Entity.Database.SetInitializer(initializer);

    _dbContext = ContainerFactory.Container.GetInstance<IContext>();
    initializer.InitializeDatabase((MyTestContext)_dbContext);

    _testConnection = _dbContext.ConnectionString;
    }

    [TearDown]
    public void Cleanup()
    {
    System.Data.Entity.Database.Delete(_testConnection);

    _dbContext.Dispose();
    }

    我认为这可能是 EF 4.1 RC 的错误。

    关于entity-framework - Entity Framework 4.1 "Code First"SetInitializer 在 Database.Delete 之后不再被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494158/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com