2

我收到此错误:

The model backing the 'database' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

问题是我的实体与数据库中的相同:相同的最大长度,如果为空,相同的数据类型。

当我更新我的模型时会发生错误,因为数据库和模型的属性不同。但我的问题是。还有其他可能发生此错误的情况吗?它说错误在此代码中:

int UserId = (from d in db.Tbl_Users
                         where d.dbUserID == userName && d.dbPassWord == pass
                         select d.dbUser).SingleOrDefault();

一切正常,表属性完全相同(数据库和模型),但是当我运行应用程序时,错误触发。所以,请重复这个问题,错误迁移何时发生?是否还有其他导致错误触发的场景?

4

2 回答 2

0

这必须是您第一次使用 DbContext 类(即连接到数据库),因此这是构建内部数据模型并与数据库模式进行比较的时候。

编辑:如果您不使用迁移并且想快速查看它是否解决了问题,您可以删除 dbo.__MigrationHistory 的内容。

于 2013-03-25T20:17:08.093 回答
0

它在那里给您错误,因为这是您第一次在应用程序中使用 DbContext 来调用数据库。每当您第一次在应用程序中请求数据库记录时,Entity Framework 将自动检查 DbContext 生成的模型是否与数据库中已经找到的模型相同。不是数据库表本身,而是存储在数据库中的模型。当它注意到它们不同时,它会自动抛出该异常。

为了避免这种情况,您需要设置某种初始化程序来告诉实体框架如果模型不匹配该怎么办。如果您正在使用迁移,它可能看起来像这样(在您第一次调用上下文之前执行此操作):

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());

还有其他初始化程序可以使用,例如 DropCreateDatabaseAlways 和 DropCreateDatabaseIfModelChanges,但我更喜欢迁移的初始化程序。

于 2013-03-25T20:50:40.913 回答