Entity Framework+SQLite+DataBaseFirst

JoeSnail發表於2017-02-27

Entity Framework+Sqlite+DataBaseFirst

本篇主要是說明在vs中配置Sqlite,及使用Entity Framework DataBaseFirst模式。

如果沒有下載vs對應的sqlite工具,在vs裡的資料連線裡是找不到sqlite資料來源這一項的。

圖:
Entity Framework+SQLite+DataBaseFirst


VS配置Sqlite

官網中找到sqlite對應的VS下載檔案,選擇含有“ bundle-x86”字元的檔案下載。如vs2015,就下載“sqlite-netFx46-setup-bundle-x86-2015-1.0.104.0.exe
(16.91 MiB) ”檔案。重啟VS,在‘服務資源管理器’,右鍵單擊‘新增連結’,選擇‘更改資料來源’,在彈出的窗體可以發現多了一項sqlite資料來源。

Entity Framework+SQLite+DataBaseFirst


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

首先建立資料庫,設計表和欄位。

圖:Entity Framework+SQLite+DataBaseFirst

圖:Entity Framework+SQLite+DataBaseFirst

在專案上右鍵‘新增’,‘新建項’,選擇‘ADO.NET 實體資料模型’

圖:Entity Framework+SQLite+DataBaseFirst

選擇‘來自資料庫的EF設計器’,單擊‘下一步’。

Entity Framework+SQLite+DataBaseFirst

Entity Framework+SQLite+DataBaseFirst

選擇‘新建連結’,更改資料來源為 System.Data.SQLite DataBase File

Entity Framework+SQLite+DataBaseFirst

Browse找到對應資料庫。

單擊‘測試連結’-檢測是否連結成功。

單擊‘確定’。

選擇如圖所示標紅項

Entity Framework+SQLite+DataBaseFirst

單擊‘完成’。

vs裡自動生成如下項:
Entity Framework+SQLite+DataBaseFirst

資料庫的操作類和連線方法,及和表對應的類,也自動生成。

圖:Entity Framework+SQLite+DataBaseFirst

建構函式的引數就是資料庫的連線字串,和App.config中的連線字串相對應。

圖:Entity Framework+SQLite+DataBaseFirst

圖:Entity Framework+SQLite+DataBaseFirst

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=&quot;data source=E:\SqliteDemo.db&quot;" 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);
            }
        }
    }
}

如果資料庫中的欄位設定為自增的話,那麼在程式碼裡需要更改該欄位的屬性。

圖:
Entity Framework+SQLite+DataBaseFirst


如果資料庫在一個單獨dll中,那麼在用到資料庫的dll也要新增sqlite包,最重要的是要把資料庫dll的配置檔案(App.Config)資訊拷貝到應用的dll中

注意:

  • 這裡Sqlite資料連線字串使用的是絕對路徑
  • App.Config使用的都是預設的配置
  • 資料庫中的主鍵為自增

相關文章