在vs2010里使用EF4.3的Code First個人使用筆記


安裝EF4.3

工具->程序包管理器->程序包管理器控件台(需要NuGet更新到最新)

鍵入安裝EF的命令 Install-Package EntityFramework (升級EF的命令'Update-Package EntityFramework')

由實體生成/更新數據庫表

1.編寫實體類

namespace TestDb
{
    public class TestDbContext : DbContext
    {
        //public TestDbContext() : base("TestDbContext") { }//TestDbContext是配置里的數據庫連接名稱,默認為DbContext的名字:TestDbContext
        public DbSet<Book> Books { get; set; }
    }

    public class Book
    {
        public int BookId { get; set; }
        [MaxLength(200)]
        public string Title { get; set; }
        public double Price { get; set; }
        [MaxLength(60)]
        public String Note5 { get; set; }
        [NotMapped]
        public String NotMappedTest{ get; set; }
    }
}

2.在程序包管理器控件台啟用遷移 Enable-Migrations (如果已經存在需要加上 -Force),常用部分參數如下(get-help Enable-Migrations -detailed 獲取幫助):

-ProjectName:""   指定項目

-Force   如存在則覆蓋遷移配置(已經運行過Enable-Migrations生成了配置)

3.新建遷移點 Add-Migration Book-ISBN (Book-ISBN是任意一個名稱標記,遷移點名稱),常用部分參數如下(get-help Add-Migration -detailed 獲取幫助):

-ProjectName:"" 指定項目

-Force 如存在則覆蓋

4.更新到數據庫 Update-Database 或者 Update-Database –Verbose  (Verbose顯示詳細信息),常用部分參數如下(get-help update-database -detailed 獲取幫助):

-ProjectName:""   指定項目

-Script   生成遷移sql語句,如 Update-Database -Script 生成更新的遷移sql,不執行掛起的操作

-SourceMigration:"開始遷移點"   只能與-Script一起使用,如 Update-Database -Script -SourceMigration:$InitialDatabase 表示生成全部的遷移sql

-TargetMigration:"結束遷移點"  回溯到某個遷移點,“0”表示回到空數據庫

-ConnectionStringName:"配置里的數據庫連接名稱"   指定數據庫,這樣不用修改代碼 就可實現更新到新的數據庫

生成的遷移文件

當運行Add-Migration Book-ISBN命令后生成的遷移程序如下:

namespace EdmDb.Migrations
{
    using System.Data.Entity.Migrations;
    public partial class reName3 : DbMigration
    {
        public override void Up()
        {
            AddColumn("Books", "Note3", c => c.String(maxLength: 60));
            AlterColumn("Books", "Title", c => c.String(maxLength: 200));
            DropColumn("Books", "Note2");
            Sql(this.Des("Books", "Title", "你好"));//手動添加,增加數據庫注釋
        }
        public override void Down()
        {
            AddColumn("Books", "Note2", c => c.String(maxLength: 60));
            AlterColumn("Books", "Title", c => c.String());
            DropColumn("Books", "Note3");
        }
    }
}

Des方法,添加數據庫注釋,這樣做還要手動添加注釋的語句,如果可以修改Add-Migration的處理方式就好了,知道的請留言

    public static class DbMigrationExt
    {
        public static string Des(this DbMigration mig,string tableName,string colName,string DesStr)
        {
            string sqlStr = "EXEC sys.sp_addextendedproperty @name=N'MS_Description'"
                + ", @value=N'" + DesStr + "' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE'"
                + ",@level1name=N'" + tableName + "', @level2type=N'COLUMN',@level2name=N'" + colName + "'";
            return sqlStr;
        }
    }

注意刪除數據庫所有表要重建的時候,需要刪除系統表__MigrationHis,__MigrationHis表記錄了遷移的日志,Add-Migration是檢查__MigrationHis確認數據庫狀態的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM