自创建数据库以来,支持“MyContext”上下文的模型已更改

时间:2016-03-23 13:28:26

标签: c# entity-framework ef-code-first code-first

运行单元测试时出现以下错误(自创建数据库以来,支持'MyContext'上下文的模型已更改)

在我的上下文构造函数中,我设置了

Database.SetInitializer<MyContext>(null);

在我的单元测试中,我正在嘲笑上下文。我还将此代码添加到单元测试中,但仍然失败。除了Database.SetInitializer<MyContext>(null);

之外还有什么需要做的

我的上下文在这里

 public class MyContext : DbContext
  {
    public MyContext () : base("MyContext") 
    {
      Database.SetInitializer<MyContext>(null);
    }

    public virtual DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
      modelBuilder.Entity<User>().ToTable("Users");
    }
  }

单元测试中的模拟

  var _context = new Mock<MyContext>();
  Database.SetInitializer<MyContext>(null);
  _classUnderTest = new Repo(_context.Object);

我在这里收到错误

  _context.Entry(user).State = EntityState.Added; 

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解了这个问题但是如果您使用的是Entity framework Code First方法,则在更改模型后,请尝试在应用程序中启用迁移。可以使用包管理器控制台来完成..

有关详细信息,请参阅此链接。MSDN link

答案 1 :(得分:0)

如果没有提供连接字符串,那么引擎盖下的EF将默认连接到sql express。所以解决这个问题的方法不是模拟上下文,而是从上下文中提取一个接口并模拟它。事实证明,MSDN上的示例非常差,因为它们模拟的是实际的上下文而不是抽象。

https://msdn.microsoft.com/en-us/library/dn314429.aspx?f=255&MSPPError=-2147217396