Entity Framework+Sqlite+DataBaseFirst
本篇主要是說明在vs中配置Sqlite,及使用Entity Framework DataBaseFirst模式。
如果沒有下載vs對應的sqlite工具,在vs裡的資料連線裡是找不到sqlite資料來源這一項的。
圖:
VS配置Sqlite
在官網中找到sqlite對應的VS下載檔案,選擇含有“ bundle-x86”字元的檔案下載。如vs2015,就下載“sqlite-netFx46-setup-bundle-x86-2015-1.0.104.0.exe
(16.91 MiB) ”檔案。重啟VS,在‘服務資源管理器’,右鍵單擊‘新增連結’,選擇‘更改資料來源’,在彈出的窗體可以發現多了一項sqlite資料來源。
VS連結Sqlite
新增Sqlite包
VS裡新建控制檯引用程式。專案名稱上右鍵選擇‘管理nuget包’。選擇‘瀏覽’,搜尋sqlite,找到對應System.Data.Sqlite安裝包(這是Sqlite官方維護的包)。
完成安裝該專案會新增如下幾項引用
- System.Data.SQLite
- EntityFramework
- EntityFramework.SqlsSrver
- System.Data.SQLite.EF6
- System.Data.SQLite.Linq
後面幾個是System.Data.SQLite依賴的安裝包,新增System.Data.SQLite會自動新增該幾項
同時也自動生成了App.Config檔案(配置資訊也自動配置完成,很方便)。
DataBaseFirst
首先建立資料庫,設計表和欄位。
圖:
圖:
在專案上右鍵‘新增’,‘新建項’,選擇‘ADO.NET 實體資料模型’
圖:
選擇‘來自資料庫的EF設計器’,單擊‘下一步’。
選擇‘新建連結’,更改資料來源為 System.Data.SQLite DataBase File
Browse找到對應資料庫。
單擊‘測試連結’-檢測是否連結成功。
單擊‘確定’。
選擇如圖所示標紅項
單擊‘完成’。
vs裡自動生成如下項:
資料庫的操作類和連線方法,及和表對應的類,也自動生成。
圖:
建構函式的引數就是資料庫的連線字串,和App.config中的連線字串相對應。
圖:
圖:
App.Config配置檔案如下:
<?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.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v13.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<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" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="SqliteDemoEntities" connectionString="metadata=res://*/SqliteDemo.csdl|res://*/SqliteDemo.ssdl|res://*/SqliteDemo.msl;provider=System.Data.SQLite.EF6;provider connection string="data source=E:\SqliteDemo.db"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
至此,連線完成。
操作Sqlite
如:
class Program
{
static void Main(string[] args)
{
using (SqliteDemoEntities entity = new SqliteDemoEntities())
{
TParent parent = new TParent
{
Name = "God",
Age = 88,
Address = "China"
};
entity.TParent.Add(parent);
TChildren child = new TChildren
{
Address = "China",
Age = 10,
Name = "XiaoMing",
TParent = parent
};
entity.TChildren.Add(child);
entity.SaveChanges();
Console.WriteLine("Parents");
foreach (var p in entity.TParent)
{
Console.Write("name: " + p.Name + " ID " + p.ParentID + " Age " + p.Age + " address " + p.Address);
}
Console.WriteLine("Children");
foreach (var c in entity.TChildren)
{
Console.Write("name: " + c.Name + " ID " + c.ParentID + " Age " + c.Age + " address " + c.Address);
}
}
}
}
如果資料庫中的欄位設定為自增的話,那麼在程式碼裡需要更改該欄位的屬性。
圖:
如果資料庫在一個單獨dll中,那麼在用到資料庫的dll也要新增sqlite包,最重要的是要把資料庫dll的配置檔案(App.Config)資訊拷貝到應用的dll中
注意:
- 這裡Sqlite資料連線字串使用的是絕對路徑
- App.Config使用的都是預設的配置
- 資料庫中的主鍵為自增