在更改数据库表列名称后,以Entity Framework 6数据库优先模式为目标的单元测试用例失败

时间:2015-04-22 03:04:46

标签: entity-framework unit-testing moq

代码相关信息:

  1. 请参阅NuGet在Visual Studio 2013下的实体框架6.13
  2. 使用数据库优先模式,即使用Visual Studio模板创建.edmx文件ADO.NET实体数据模型 - >来自数据库的EF Designer
  3. 我的DbContext代码:

    public partial class MySampleEntities : DbContext
    {
        public MySampleEntities ()
        {
        }
    
        public MySampleEntities (string nameOrConnectionString)
            : base(nameOrConnectionString)
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        ...
    }
    
  4. 使用以下示例代码修改模型的一种方法:

    using (var dbContext = GetDbContext())
    {
        ...
        dbContext.Entry(blobItem).State = EntityState.Modified;
        await dbContext.SaveChangesAsync();
    }
    
  5. 单元测试用例信息:

    1. 使用NUnit和Moq
    2. 一些单元测试代码:

      var mockContext = new Mock<MySampleEntities>();
      
    3. 在一些数据库表列名更改后,使用初始数据库模式传递测试,并执行Visual Studio"从数据库更新模型..."命令在.edmx图表上,更新所有相应的模型属性,构建代码,最后无法在代码dbContext.Entry(blobItem).State = EntityState.Modified上运行单元测试,但有以下异常:

        

      支持' MySampleEntities'自创建数据库以来,上下文已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

    4. 已尝试解决方案:

      1. Database.SetInitializer(null)
      2. 的构造函数中使用MySampleEntities
      3. 无法执行NuGet Package Manager命令,如Enable-MigrationsUpdate-Database等,但有以下异常,似乎是代码优先模式:

          

        System.Data.Entity.Infrastructure.UnintentionalCodeFirstException:在Code First模式下使用上下文,其中包含从EDMX文件生成的用于Database First或Model First开发的代码。这将无法正常工作。

      4. 我的问题:

        1. 如何解决此问题以使单元测试用例成功运行?

0 个答案:

没有答案