在 C# 中使用實體模型(Entity Framework)一般使用 MSSQL 數據庫,這也是 vs2010 的默認方式。
SQLite 作為一種輕型數據庫,實現了 SQL92 標准的大部分規定,利用 .net 連接庫,可以與實體模型配合使用。以下是需要
准備的環境:
- Vs2010 + .Net Framework 4
- System.Data.SQLite,下載地址。開發環境需要安裝 Setups for 32-bit Windows (.NET Framework 4.0),發布時只需要打包 Precompiled Binaries for 32-bit Windows (.NET Framework 4.0)中的兩個文件(System.Data.SQLite.dll 和 System.Data.SQLite.Linq.dll)。
- 如果需要從模型生成 DDL,需要下載 SSDLToSQLite3,解壓縮后放到 C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen(隨 Vs2010 安裝位置有所不同)。
- EF Power Tools Beta 3,在 Vs2010 的擴展管理器中下載安裝。
- DbContext Generator,下載地址。
SQLite 不支持 Code First。變通的辦法是使用 MsSql 實現 Code First 的 POCO 類定義,然后將生成的 Edmx 文件保存到另外的工程中實現 Model First。生成的 Edmx 需要手動將其中的 中的 Provider 改為 System.Data.SQLite。
使用 Nuget 將 EntityFramework 安裝到當前工程時,會自動添加 App.Config 文件。需要添加以下內容:
<connectionStrings> <add name="MyModels"
connectionString="metadata=res://*/MyModels.csdl|res://*/MyModels.ssdl|res://*/MyModels.msl;provider=System.Data.SQLite;provider connection string="Data Source=MyModels.db3;Version=3;"" providerName="System.Data.EntityClient" /> </connectionStrings> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite"/> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.84.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/> </DbProviderFactories> </system.data>
Code First 中使用 EntityTypeConfiguration 語法無法定義字段的默認值,需要修改數據庫的 DDL 定義,或者在 Edmx 文件生成的實體類中添加初始值設置。注意不能直接修改自動生成的類文件,當 edmx 文件改動后會重新生成實體類定義,導致改動丟失。應該在同一文件夾中添加 partial 類文件。