sqliteEntity Framework+SQLite+DataBaseFirst

Entity Framework+Sqlite+DataBaseFirst

本篇主要是验证以vs中配置Sqlite,及动Entity Framework
DataBaseFirst模式。

如若无下载vs对应的sqlite工具,在vs里之多少连接里是寻觅不交sqlite数据源这同一宗之。

图:
sqlite 1


VS配置Sqlite

在官网中找到sqlite对应之VS下充斥文件,选择含“
bundle-x86”字符的公文下充斥。如vs2015,就下载“sqlite-netFx46-setup-bundle-x86-2015-1.0.104.0.exe
(16.91 MiB)
”文件。重开VS,在‘服务资源管理器’,右键单击‘添加链接’,选择‘更改数据源’,在弹出的窗体可以发现差不多矣同一宗sqlite数据源。

sqlite 2


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

首先创建数据库,设计表和字段。

图:sqlite 3

图:sqlite 4

以列及右键‘添加’,‘新建起’,选择‘ADO.NET 实体数据模型’

图:sqlite 5

摘‘来自数据库的EF设计器’,单击‘下一样步’。

sqlite 6

sqlite 7

慎选‘新建链接’,更改数据源为 System.Data.SQLite DataBase File

sqlite 8

Browse找到呼应数据库。

单击‘测试链接’-检测是否链接成功。

单击‘确定’。

选取如图所示标红项

sqlite 9

单击‘完成’。

vs里自动生成如下项:
sqlite 10

数据库的操作类和连方式,及和表对应之类似,也自动生成。

图:sqlite 11

构造函数的参数就是数据库的连天字符串,和App.config中的连日字符串相对应。

图:sqlite 12

图:sqlite 13

App.Config配置文件sqlite如下:

<?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);
            }
        }
    }
}

假若数据库被的字段设置也自增的话,那么以代码里用转移该字段的性质。

图:
sqlite 14


假设数据库在一个单独dll中,那么在于是到数据库的dll也使上加sqlite包,最着重之是设拿数据库dll的部署文件(App.Config)信息拷贝到应用之dll中

注意:

  • 此地Sqlite数据连接字符串使用的是绝对路径
  • App.Config使用的都是默认的布
  • 数据库中之主键为自增
网站地图xml地图