codefirst資料庫遷移
1. Code First 做數據遷移出現錯誤:類型「Configuration」不是遷移配置類型。
說清楚你的要求,還有要生成的資料庫是什麼資料庫。
上面的提示「
No context type was found in the assembly xxx
」
在當前項目中 沒有找到資料庫上下文,也就是 DbContext 繼承的的 "資料庫.cs",你檢查一下你的文件。
2. 支持"TestSqlDB"上下文的模型已在資料庫創建後發生更改.請考慮使用 Code First 遷移更新資料庫
把資料庫的沖突的表名字改掉,遷移完成後改回去
3. 關於EF Code First Migrations資料庫遷移
update-database 加一個-script 參數, 這樣就會生成一個更新腳本, 放到伺服器上執行就可以了不過對於數據的沖突還是要手動進行修復比如你重新命名了一個列, 那麼要在代碼中告訴EF怎麼處理, 否則的話它生成的腳本會刪除原來的列, 然後重新建一個列,這樣數據就丟了
4. code first發布後怎麼初始化資料庫
seed函數內容添加的時候,你的codefirst
代碼沒有更新,所以Seed函數沒有被調用。
Migration
只檢查資料庫的機構有沒有發生變化,如果發生了變化,它會調用Seed方法重新初始化資料庫。但是如果資料庫已經存在而且與你的當前代碼一致
5. EF CodeFirst 怎麼來更新已存在的資料庫結構
本地更新或者開發環境可以直接連上資料庫的,直接在Package Manager Console(包管理器控制台)輸入:update-database -〉回車執行OK
自動更新方法:
在程序初次運行時增加Database.SetInitializer(new <DbContext, Configuration>());
DbContext是你資料庫連接的context,
Configuration是你程序Migrations里的,如果不在一個項目里,要將Configuration類改為public。
直接運行程序OK,
有人問web版的怎麼弄,放在哪?
找到目錄下的Global.asax,加到 Application_Start 里就OK了
6. 如何使用CodeFirst進行數據遷移
如果你還在為 支持xxx上下文的模型已在資料庫創建後發生更改。請考慮使用 Code First 遷移更新資料庫 找到你的資料庫上下文所在的類庫(一般都是寫在項目中的model中,也有的獨立model類庫) 打開Nuget 程序包管理控制台 輸入:Enable-Migrations 回車 如果正確的話 則顯示已為項目 xxx啟用 Code First 遷移。 我在這里說下 幾種有可能出現的錯誤: 1.No context type was found in the assembly xxx 在當前項目中 沒有找到資料庫上下文,也就是DbContext 繼承的的 "資料庫.cs" 2.The EntityFramework package is not installed on project xxx 當前項目已經找到了數據上下文,但是沒有EntityFrameWork 需要安裝輸入 install-package entityframework(手大的 不知道對不對) 基本就這兩個問題,如果安裝成功則在項目中 出現Migrations文件夾,裡面會記錄每次數據遷移所發生的變化。 非常好用,不用再刪除資料庫 重新生成 數據丟失等問題。 常用語句 :enable-Migrations -Force 替換遷移數據文件 update-database 更新 add-migration 添加新的更新文件
7. entity framework codefirst 不能創建資料庫表。
使用Entity Framework CodeFirst模式創建新資料庫
開發環境
Visual Studio 2010 SP1
SQL Server Compact 4.0
演練步驟
打開Visual Studio;
新建Console應用程序Known.EFDemo;
創建Blog模型;public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
右擊項目->管理NuGet程序包,搜索Entity Framework並安裝;或使用程序包管理器控制台運行命令Install-Package EntityFramework;
創建BlogContext;
public class BlogContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
}
修改App.config文件,配置ConnectionString和SQL Server Compact數據提供者工廠;<connectionStrings>
<add name="BlogContext" connectionString="Data Source=|DataDirectory|Blog.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
修改Program並運行,成功後,可以在伺服器資源管理器中查看自動生成的表結構及數據。using (var context = new BlogContext())
{
Console.WriteLine("請輸入博客名稱:");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
blog.Posts = new List<Post>();
Console.WriteLine("請輸入隨筆標題:");
var title = Console.ReadLine();
Console.WriteLine("請輸入隨筆內容:");
var content = Console.ReadLine();
blog.Posts.Add(new Post { Title = title, Content = content });
context.Blogs.Add(blog);
context.SaveChanges();
Console.WriteLine("保存成功!");
}
當模型改變時,可以使用命令自動遷移資料庫,配置命令:Enable-Migrations –EnableAutomaticMigrations ;更新命令:Update-Database –Verbose 。
8. enable-migrations 包控制台使怎麼使用
如果你還在為 支持xxx上下文的模型已在資料庫創建後發生更改。請考慮使用 Code First 遷移更新資料庫 找到你的資料庫上下文所在的類庫(一般都是寫在項目中的model中,也有的獨立model類庫) 打開Nuget 程序包管理控制台 輸入:Enable-Migration
9. 奇怪的實體,實體框架代碼更新問題,怎麼解決
EF本身就是C#中實體和DB的映射,更新實體其實就是更新資料庫。
1、
如果是DB FIRST,那麼你的實體是跟著DB走的,你必須更新表結構,然後在VS中重新生成模型,實體才會跟著變。
如果只把entity欄位改了,那麼運行的時候會報錯的。
2、如果是codefirst,那麼你更新實體之後,EF會更新你的DB結構, 這時候你就需要去選擇遷移數據還是重建了。 遷移的教程參考MSDN,命令比較復雜。 重建只需要在初始化器里override方法: DropDatabaseIfModified(如果結構改變則自動重新生成資料庫)。