我,为了我的生活,无法摆脱这个错误消息。我几乎尝试了我能尝试的一切。
MyDBContext.cs
public MyDBContext() : base("ConnStr_Dev")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, DbMigrationsConfiguration<MyDBContext>>());
//Database.SetInitializer<MyDBContext>(null);
base.OnModelCreating(modelBuilder);
}
通用存储库.cs
public void Insert(T obj)
{
table.Add(obj); //this is where it throws the error, inserting first time.
}
以不同的组合尝试了所有这些
启用迁移 -启用自动迁移 -强制
添加迁移初始 - 忽略更改
更新数据库
我尝试删除迁移表,删除整个数据库,所有内容。
请问任何迁移专家吗?
编辑:DAL 包含 GenericRepository 和上下文类。
我也与这个错误作斗争。我添加了迁移,然后进行了我认为微不足道的更改。
此属性:迁移中的IMigrationMetadata.Target
不是随机的。它是根据迁移完成时模型的状态计算的。(这可能过于简单化了。
因此,如果进行其他更改,则看起来还有其他待处理的更改需要再次迁移。
就我而言,由于更改尚未提交到源代码管理,因此解决方法是删除并重新添加迁移。找出原因需要一段时间,因为除非您已经知道导致它的原因,否则错误消息不清楚。但我学到的教训(对 EF 来说相对较新(是,对模型的更改需要新的迁移或重新执行我正在处理的迁移。
- 从解决方案中删除
Migrations
文件夹 - 从数据库中删除
dbo.__MigrationHistory
表 - 开放式
Package Manager Console
和Enable-Migrations
- 添加初始迁移
Add-Migration Initial
-
Update-Database
- 做
您只需对一个或多个实体类进行了更改。无论是添加了新属性、更改了该特定属性的数据类型,还是只是添加了新的实体类,在所有这些情况下,您确实需要添加新的迁移。
看到你已经尝试过,请确保在包管理器控制台中执行"添加迁移"命令时,已选择包含 DBContext 类、"配置类"和"迁移">文件夹的项目。此外,您正在将特定的连接字符串传递给 MyDBContext 类的基类 (DbContext(。请确保还升级和更新了正确的数据库。
知道您可以对特定数据库执行"添加迁移"命令和"更新"命令:
示例代码段:
Add-Migration AddProperty1 -ConnectionString "Data Source=.SQLEXPRESS;Initial Catalog=MyDatabaseCatablog;Connect Timeout=30;User ID=MyUser;Password=mypassword12345" -ConnectionProviderName "System.Data.SqlClient" -Verbose
和
Update-Database -ConnectionString "Data Source=.SQLEXPRESS;Initial Catalog=MyDatabaseCatablog;Connect Timeout=30;User ID=MyUser;Password=mypassword12345" -ConnectionProviderName "System.Data.SqlClient" -Verbose
希望这有帮助。
在我的情况下,错误是通过添加数据库初始化器类型来解决的...应用设置。
<appSettings>
<add key="DatabaseInitializerForType EasyEntity.EasyContext, EasyEntity" value="EasyEntity.EasyInitializer, EasyEntity" />
这个错误在我的情况下已经足够奇怪了,我忘了取消注释 CONNECTIONSTRING 设置,这意味着有一个正确的连接字符串解决了这个错误。希望对您有所帮助!