1. 程式人生 > >EF框架概述之Code First

EF框架概述之Code First

簡介

    Code First的模型最早是從EF 4開始的永存無知模型,它最主要的目的是要讓程式設計師通過程式程式碼的方式來定義資料結構,沒有特別的的GUI工具,並且以FluentAPI的風格來設計API,降低程式設計師使用API的門坎,因此Code First的API並不難,不過還是要有些資料庫的相關概念,否則API再好用也不知道為何而用。

生成模型——空白Code First的做法

    與Database First和Model First一樣,可以通過新增ADO.NET實體資料模型來生成模型,不過這次選擇的是“空白的Code First模型”,如下圖:

    新增完成後,Visual Studio會開啟生成好的Code First程式程式碼,正如Code First其名,定義的規則全部由程式程式碼處理,所以這也意味著使用Code First方式進行建模時,可以直接使用類的程式程式碼,而不需一定要用ADO.NET實體資料模型的方式產生。如下圖:

    注意:若是使用自己生成類的方式編寫Code First模型的話,成了程式結構外,還要記得在App.config或者Web.config中加入EF相關的配置,否則程式沒辦法順利訪問資料庫。

    Code First模型生成完成時,嚮導在App.config中加入了下列設定(注意嚮導預設會使用SQL Server Express LocalDb作為目標的資料庫伺服器,如果需要改變的話,先改這裡):

<?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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="Model1" connectionString="data source=(LocalDb)\v11.0;initial catalog=Code_First.Model1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
修改目的和方式
修改目的修改方式
變更資料庫型別

修改<deafultConnectionFactory>的設定

1.資料庫型別為SQL Server(非LocalDb)

<defaultConnectionFactory type="System.Data.Infastructure.SqlConnectionFactory,EntityFramework">

<parameters>

<parameter value="Data Srouce=MyDatabaseServer;Intergrated Security=True;MultipleActiveResultSets=True" />


</parameters>

</defaultConnectionFactory>

2.資料庫型別為SQL Server Compact

<defaultConnectionFactory type="System.Data.Entity.Infastructure.SqlCeConnectionFactory,EntityFramework">

<parameters>

<parameter value="System.Data.SqlServerCe.4.0" />

</parameters>

</defaultConnectionFactory>

3.資料庫型別為SQL Server Express LocalDb

<defaultConnectionFactory type="System.Data.Entity.Infastructure.LocalDbConnectionFactory,EntityFramework">

<parameters>

<parameter value="v12.0" />

</parameters>

</defaultConnectionFactory>

4.資料庫型別為非SQL Server請參照資料庫連線軟體的檔案說明修改<connectionStrings>內的連線字串

變更資料庫名稱或連線賬戶

修改<connectionStrings>內的連線字串

1.Code First的連線字串

<connectionStrings>

<add name="BlogContext" providerName="System.Data.SqlClient" connectionString="Server=(local);Database=Blogs;Integrated Security=True;" />

</connectionStrings>

2.Database First/Model First的連線字串

<connectionStrings>

<add name="BlogContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient

provider connection string=&quot;data source=(localdb)\v11.0;initial catalog=Blogs;integrated security=True;multipleactiveresultsets=True;&quot;" providerName="System.Data.EntityClient" />

</connectionStrings>

    Code First的模型定義是使用程式程式碼,基本上所有的設定方式都是通過API的呼叫來進行的,但其實生成出來的程式程式碼已經可以使用,如下圖:

    然後在主程式中編寫下列程式程式碼,當它執行完成時就可以看到資料庫了,如下圖:

生成模型——由資料庫生成

    若是現有資料庫要生成Code First模型,方法也很簡單,只要在ADO.NET實體資料模型嚮導中選擇“來自資料庫的Code First模型”選項,其他的操作和Database First的模型產生步驟相同。不過,要注意的是,Code First的模型生成曲面沒有支援儲存過程和函式,所以在選擇生成的資料庫物件的螢幕顯示畫面內看不到儲存過程和函式,如下圖:

未完待續。。。