C# Code First 配置
前言
所謂code first,是代碼優先,而不是傳統的數據庫優先。
code first的好處多多,可不用考慮數據庫,只考慮面向對象。下面我們介紹一下code first的配置。
開始
我們這裏以建立一個MVC的Code first為例,名字為MVCCodeFirst。
1)建立模型
建立一個數據的新建項,然後選擇ADO.NET實體數據模型,名字為MyModel
然後選擇Code First模型,空Code First模型,你也可以選擇來自數據庫的CodeFirst。我們這裏選擇空CodeFirst模型
確定之後,模型已經建立了
2)建立實體
我們建立一個實體School,有一個主鍵與學校名字
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace MVCCodeFirst.Entity { public class School { [Key] public long Key { get; set; } public string Name { get; set; } } }
然後把School添加到DbContext的上下文中。
using System.ComponentModel.DataAnnotations; namespace MVCCodeFirst.Entity { using System; using System.Data.Entity; using System.Linq; public class MyModel : DbContext { public MyModel() : base("name=MyModel") { } //我們添加的School publicvirtual DbSet<School> Schools { get; set; } } }
3)啟動 Enable-Migrations
上面已經建立了表的實體,Code First要創建表,我們要通過命令行來自動生成SQL語句,所以要啟動這個功能。
在【程序包管理器控制臺】中,啟動自動生成SQL語句
Enable-Migrations
如下:
完成之後,你在代碼裏面可以看到,自動添加了一個文件夾為Migrations,並且類為Configuration.cs
打開可以看到,這裏主要用戶初識化一些默認的數據
namespace MVCCodeFirst.Migrations { using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<MVCCodeFirst.Entity.MyModel> { public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(MVCCodeFirst.Entity.MyModel context) { //初始化數據 } } }
例如,我們可以初識化學校的數據。這個初始化數據是在輸入命令update-database的時候才會調用
//初始化數據格式 context.Schools.AddOrUpdate(new School() {Key = 1, Name = "望牛墩中學"}); context.SaveChanges();
4)配置數據庫
打開web.config,可以看到數據庫連接現在是
<connectionStrings> <add name="MyModel" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=MVCCodeFirst.Entity.MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings>
我們修改成本地連接
<add name="MyModel" connectionString="Server=localhost; Database=MyModel; Trusted_Connection=True;" providerName="System.Data.SqlClient" />
5)用命令創建數據庫、表
初識化數據
add-migration init
就會生成創建的SQL類在Migrations文件夾下
創建數據庫、表。在命令中輸入:
update-database
我們可以看到本地數據庫中有創建了此數據庫與表:
3.其他
1)果想指定表的名字,可以在實體類上用註解Table,例如
[Table("School")] public class School
2)主鍵註解 [Key]
[Key] public long Id { get; set; }
3)如果想創建一個自增長的主鍵
在DB上下文實體中,繼承OnModelCreating方法,並且實現實體的主鍵自增長
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace MVCCodeFirst.Entity { using System; using System.Data.Entity; using System.Linq; public class MyModel : DbContext { //您的上下文已配置為從您的應用程序的配置文件(App.config 或 Web.config) //使用“MyModel”連接字符串。默認情況下,此連接字符串針對您的 LocalDb 實例上的 //“MVCCodeFirst.Entity.MyModel”數據庫。 // //如果您想要針對其他數據庫和/或數據庫提供程序,請在應用程序配置文件中修改“MyModel” //連接字符串。 public MyModel() : base("name=MyModel") { } //我們添加的Schools public virtual DbSet<School> Schools { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //自增長主鍵 modelBuilder.Entity<School>() .Property(o => o.Id) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); } } }
C# Code First 配置