我不明白爲什麼在運行update-database
命令時會創建另一個數據庫,而不是將未決遷移應用到現有數據庫。這種情況似乎偶爾發生。這些是我習慣遷移時使用的陡峭:EF創建另一個數據庫,而不是將遷移應用到現有數據庫
- 將包管理器項目設置爲
MySolution.MyProject
; - 運行
update-database
命令。它偶爾創建一個新的數據庫與我的上下文全班名稱,例如:MySolution.MyProject.MyContext
; - 在SQL Server Management Studio上,我刪除了新創建的數據庫
MySolution.MyProject.MyContext
; - 再次運行相同的命令
update-database
。然後,EF正確找到我的數據庫,其名稱爲onlyMyContext
並且僅應用待處理的遷移。
最後一步是最初的預期結果。我想了解:爲什麼這是另一個數據庫正在創建? EF在第一次運行時不應該找到正確的名稱嗎?爲什麼我第二次運行時運行正常?我一定在做一些非常錯誤的事情。
這裏是我的遷移項目,這是MySolution.MyProject.MyContext
,的app.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="MyContext" connectionString="Data Source=.\SQLDEV;Initial Catalog=MyContext;Persist Security Info=True;User ID=my_user;Password=my_password;Pooling=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
...
</configuration>
我給數據庫用戶的所有特權我的機器(SQL用戶>服務器角色)上。
這我的文件MyContext.cs:
namespace MySolution.MyProject
{
public class MyContext : DbContext
{
public MyContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
public MyContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
public MyContext(DbConnection existingConnection, bool contextOwnsConnection)
: base(existingConnection, contextOwnsConnection)
{
}
public MyContext(ObjectContext objectContext, bool dbContextOwnsObjectContext)
: base(objectContext, dbContextOwnsObjectContext)
{
}
// ... lots of stuff...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
base.OnModelCreating(modelBuilder);
}
}
}
我如何能理解/調試/找出發生了什麼事是知道的任何建議。
你可以做的一件事是當你更新數據庫時使用'-verbose'開關。我總是使用它,因爲它讓你看看EF實際上在做什麼。 – DrewJordan 2015-02-09 14:08:34
@DrewJordan謝謝!這有幫助! – rodrigogq 2015-02-09 15:59:49
好!如果你發現你的問題,你應該回到這裏作爲回答,幫助其他可能遇到同樣問題的人。 – DrewJordan 2015-02-09 16:01:32