文章出處
文章列表
前面的例子中,我們已經看到了Code-First自動為我們創建數據庫的例子。
這里我們將要學習的是,當初始化的時候,Code-First是怎么決定數據庫的名字和服務的呢???
下面的圖,解釋了這一切!!!
這個圖解釋了,數據庫初始化的流程,是基于我們在上下文類中的構造函數中傳遞的參數。
在上面的圖中,context類中的base構造器中,可以填入下面的參數:
- 無參數(No Parameter)
- 數據庫的名字(Database Name)
- 連接字符串的名字(Connection String Name)
無參數
如果你沒有在base構造器中指定任何的參數,Code-First將會以你本地的服務器名字,也就是:{Namespace}.{Context class name}.例如下面代碼中:code-First將會將會一個名字為EF1.DbContextClass的數據庫。
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF1 { public class DbContextClass:DbContext { public DbContextClass() : base() { } public DbSet<Student> Studnets { get; set; } public DbSet<Standard> Standards { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>()); base.OnModelCreating(modelBuilder); } } }
數據庫名字
你同樣可以指定數據庫的名字在base構造器中,例如:
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF1 { public class DbContextClass:DbContext { public DbContextClass() : base("MYDBHAHA") { } public DbSet<Student> Studnets { get; set; } public DbSet<Standard> Standards { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>()); base.OnModelCreating(modelBuilder); } } }
然后生成的數據庫是:
連接字符串
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF1 { public class DbContextClass:DbContext { public DbContextClass() : base("ConnectionString") { } public DbSet<Student> Studnets { get; set; } public DbSet<Standard> Standards { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>()); base.OnModelCreating(modelBuilder); } } }
或者這樣寫:
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF1 { public class DbContextClass:DbContext { public DbContextClass() : base("name=ConnectionString") { } public DbSet<Student> Studnets { get; set; } public DbSet<Standard> Standards { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>()); base.OnModelCreating(modelBuilder); } } }
上面任選一種方式,改動之后,我們在配置文件中,添加下面的節點:
<connectionStrings> <add name="ConnectionString" connectionString="server=.;database=EFCodeFirstDB;uid=sa;pwd=Password_1" providerName="System.Data.SqlClient"/> </connectionStrings>
這個節點,我一般都是加在這個位置:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <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="ConnectionString" connectionString="server=.;database=EFCodeFirstDB;uid=sa;pwd=Password_1" providerName="System.Data.SqlClient"/> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0"/> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/> </providers> </entityFramework> </configuration>
改好之后,我們運行程序,在數據庫管理工具中就生成了我們想要的數據庫:
這就是三種方式的初始化數據庫了。
下面附上目錄,方便查看:
- 什么是Code First
- 簡單的Code First例子
- Code-First 約定
- DB Initialization(數據庫初始化)
- Inheritance Strategy(繼承策略)
- Configure Domain Classes(配置領域類)
- DataAnnotations(數據注解)
- Fluent API
- Configure One-to-One(配置一對一關系)
- Configure One-to-Many(配置一對多關系)
- Configure Many-to-Many(配置多對多關系)
- Move Configurations(數據遷移)
- DB Initialization Strategy(數據庫初始化策略)
- ...待續.....
文章列表
全站熱搜