程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 使用NuGet助您玩轉代碼生成數據:Entity Framework 之Code First

使用NuGet助您玩轉代碼生成數據:Entity Framework 之Code First

編輯:關於.NET

在Code First中,編寫完代碼並運行之後,我們的Model會同步到Db中,但是往往我們 需要的是編寫完Model就生成數據庫,而不是等UI部分完成並運行之後才看到數據庫,借助NuGet程序包管理器 可以讓我們即時完成Code=>DB。

准備:1.本人開發工具為VS2012,使用的是.NET Framework 4.5 (EF5);

2.然後確保已在VS擴展中安裝了最新的“NuGet程序包管理器”;

3.常用的三行 NuGet用於EF命令(當然可以直接用命令“get-help EntityFramework”獲取):“Enable-Migrations”   --在對應項目中啟用、“Add-Migration <名稱>”  --搭建基架、“Update-Database”  --提交(應用基於代碼的遷移)

4.新建類庫項目“CodeFirst”。

開始:

1. 在vs打開“程序包管理控制台”,輸入“get-help NuGet”回車,可以查看一些命令。

2. 在程序包管理控制台輸入“Install-Package EntityFramework”,此過程必須保證機子聯網,如未聯 網,本人有個法子,就是在項目中新建Entity Framework(如“ADO.NET實體數據模型”)項,然後再刪除該 項即可。上述命令執行前確保如下圖所示說明

  此時可以看到項目多了個文件“packages.config”,同樣在引用下多了“EntityFramework”的程序 集。而在解決方案目錄下則多了文件夾“packages”(物理目錄,非解決方案目錄),假如我們要拷貝項目, 則應連同該目錄拷貝,否則到別的目錄下再編譯項目之前仍然重新需要執行“Install-Package EntityFramework”,這是在將解決方案添加到源碼管理時需要注意的地方。

3.項目下添加項目文件夾 “Models”,並在該文件夾編寫以下三個類與一個枚舉(EF5對枚舉的支持是非常棒的):

/// 

<summary>
    /// 性別
    /// </summary>
    public enum Gender
    {
        Female = 0,
        Male,
        LadyBoy
    }
/// <summary>
    /// 人名
    /// </summary>
    public class PersonName
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName
        {
            get
            {
                return string.Format("{0} {1}", FirstName, LastName);
            }
        }
    }
public abstract class BaseModel
    {
        public BaseModel()
        {
            this.CreatedTime = DateTime.Now;
            this.LastUpdatedTime = DateTime.Now;
        }
    
        public DateTime CreatedTime { get; set; }
        public string Creater { get; set; }
        public DateTime LastUpdatedTime { get; set; }
        public string LastUpdater { get; set; }
    }
[Table("UserInfo")]
    public class UserModel : BaseModel
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public string LoginName { get; set; }
    
        [MaxLength(50)]
        public string Password { get; set; }
    
        public int Age { get; set; }
    
        public Gender Gender { get; set; }
    
        public DateTime? LastLoginTime { get; set; }
    
        public PersonName Name { get; set; }
    }

4.在項目下繼續新建類“CodeFirstDbContext”

public class CodeFirstDbContext 

: DbContext
    {
        public DbSet<UserModel> Users { get; set; }
    
        public CodeFirstDbContext() : base("DefautConnection") { }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<UserModel>();
        }
    }

5.在“程序包管理控制台”(注意第二步截圖中所說的,以下關於NuGet命令均必須如此), 輸入“Enable-Migrations”回車,項目多了Migrations目錄。

6.在解決方案下新建控制台項目 “ConsoleUI”,再在該項目下新建文件夾“App_Data”(此步驟非必須,我系統未安裝SQL Server,因而我 將使用數據庫文件,文件則位於當前剛創建的目錄下)。

7.在DbContext所在的項目CodeFirst下的 App.config下添加如下節點(注意不要添加到configSections節點之前)

<connectionStrings>
    <add name="DefautConnection" connectionString="data source=(LocalDB)

v11.0;attachdbfilename=H:shujuVS2012CodeFirstConsoleUIApp_DataCodeFirstDb.mdf;integrated 

security=True;MultipleActiveResultSets=True;App=EntityFramework" 

providerName="System.Data.SqlClient" />
  </connectionStrings>

8.在“程序包管理控制台”輸入命令“Enable-Migrations”,保證 無錯誤提示,繼續輸入“Add-Migration CreateDb”,注意CreateDb可由咱們自行定義。

  此時VS 生成了一個名字很長的cs文件,可以看到其為咱們創建數據表的代碼,EF對枚舉、復雜類型、實體繼承都提供 了非常棒的知識,我們此時可以修改相應代碼以生成我們希望看到的表結構。

9.編寫控制台程序以驗證我們的程序(注意添加引用並添加app.config添加數據連接字符串)。

public static void Main()
        {
            UserModel model = new UserModel
            {
                Age = 27,
                Creater = "me",
                Gender = Gender.LadyBoy,
                LastUpdater = "me",
                LoginName = "admin",
                Name = new PersonName { FirstName = "san", LastName = "zhang" },
                Password = "1234"
            };
            using (CodeFirstDbContext context = new CodeFirstDbContext())
            {
                context.Users.Add(model);
                context.SaveChanges();
            };
    
            Console.WriteLine("成功添加用戶,接下來將獲取。。。");
    
            using (CodeFirstDbContext context = new CodeFirstDbContext())
            {
                UserModel getModel = context.Users.FirstOrDefault();
                Console.WriteLine("名字:{0},性別:{1},創建時間:{2}"
                    , getModel.Name.FullName, getModel.Gender, getModel.CreatedTime);
            };
    
            Console.Read();
        }

10.收工。

完成之後就感覺很容易,由於我之前機子未聯網而在做demo時頗費周折 。在來看看我們用到的NuGet命令:

Install-Package EntityFramework

Enable- Migrations

Add-Migration

Update-Database

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved