這里我們用Code First方法創建數據庫表。這個方法簡單點說就是先創建Model再根據Model生成數據庫表。
為了方便起見,這里用的數據庫是Visual Studio自帶的LocalDb。
數據庫上下文,就是我們這里的數據訪問層,根據Model對數據庫表進行不同的操作。因此我們首先在項目中創建一個數據訪問層文件夾,命名為DAL。然后,在DAL文件夾中創建Model對應的數據庫訪問上下文類,命名為CompanyContext。寫入代碼如下:
1 using System.Data.Entity; 2 using SlarkInc.Models; 3 using System.Data.Entity.ModelConfiguration.Conventions; 4 5 namespace SlarkInc.DAL 6 { 7 public class CompanyContext : DbContext 8 { 9 public CompanyContext() : base("CompanyContext") 10 { 11 } 12 13 public DbSet<Worker> Workers {get;set;} 14 15 protected override void OnModelCreating(DbModelBuilder modelBuilder) 16 { 17 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 18 } 19 } 20 }
因為我們這里數據庫訪問要用Entity Framework, 所以第1行要引入System.Data.Entity。第7行,我們的數據庫上下文繼承EF中的DbContext基類。第9行表示
CompanyContext 繼承基類DbContext的構造函數。第13行表示我們的Model Worker和CompanyContext中的數據集Workers對應。第15到18行定義了一個事件
OnModelCreating,這個事件在我們使用的Code First方法在數據庫中創建數據表時觸發。第17行的代碼的作用是使我們創建出來的數據庫表名字都是單數,不是復數。也就是說將來的數據庫表名是Worker而不是Workers。這也是我們創建數據庫表的習慣命名方法。
然后在Web.config文件里面加入這個數據庫上下文要用到的數據庫連接字符串。如下面的代碼所示,在Web.config文件中找到<configuration>元素。然后在<configuration>元素內找到<connectionStrings>元素。最后在<connectionStrings>元素內加入如下<add>元素。
<configuration> <connectionStrings> <add name="CompanyContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Company;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Company.mdf" providerName="System.Data.SqlClient" /> </connectionStrings> <configuration>
這樣我們的數據庫上下文CompanyContext就可以用這個連接字符串來訪問數據庫了。解釋一下<add>元素里的內容。name="CompanyContext"是連接字符串的名字,這個要和CompanyContext.cs 里的base("CompanyContext")函數的參數一樣,這樣初始化數據庫上下文的時候才能讀到字符串。Data Source=(LocalDb)\v11.0表示使用的數據庫種類和版本。Catalog=Company是數據庫的名字。Integrated Security=SSPI是驗證方式。AttachDBFilename=|DataDirectory|\Company.mdf表示在我們這里,數據庫文件存在 ~\App_Data\Company.mdf 下。providerName="System.Data.SqlClient"表示我們這里要用的數據庫連接器,或者叫數據庫驅動。
然后我們還要在Web.config中聲明數據庫上下文。在<configuration>中找到<entityFramework>元素。在<entityFramework>元素中找到<contexts>元素。在<contexts>元素中寫入如下<context>元素。
<entityFramework>
<contexts>
<context type="SlarkInc.DAL.CompanyContext, SlarkInc"> <databaseInitializer type="SlarkInc.DAL.CompanyInitializer, SlarkInc" /> </context> </contexts>
</entityFramework>
type="SlarkInc.DAL.CompanyContext, SlarkInc"中的SlarkInc.DAL.CompanyContext表示這個CompanyContext的NameSpace和類名。逗號后面的SlarkInc表示這個CompanyContext在SlarkInc.dll中。
這樣我們就把CompanyContext添加到了Entity Framework的上下文中。