首页 > 数据库 >C# EntityFramework+SQLite CodeFirst 创建数据库和数据表

C# EntityFramework+SQLite CodeFirst 创建数据库和数据表

时间:2023-11-09 17:23:29浏览次数:65  
标签:SQLite set get C# EFDbContext 数据表 public

1、安装NuGet包

  1. System.Data.SQLite(System.Data.SQLite.Core、System.Data.SQLite.EF6、System.Data.SQLite.Linq )
  2. SQLite.CodeFirst
  3. EntityFramework

2、配置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.8" />
  </startup>
  <entityFramework>
    <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" />
      <provider invariantName="System.Data.SQLite" 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="EFDbContext" connectionString="Data Source=Database.db" providerName="System.Data.SQLite.EF6"/>
  </connectionStrings>
</configuration>

在app.config中手动添加高亮部分代码,DataSource修改成对应的数据库文件名

3、创建实体类

    [Table("DeptInfo")]   // 标识数据库创建的表名
    public class DeptInfo
    {
        public string SubDept { get; set; }
        public string DeptName { get; set; }
        public string DeptCode { get; set; }
        public string RuleCode { get; set; }
        
        [Key]   // 主键
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]       // 自增列
        public int DeptId { get; set; }
    }    

 

4、创建EFDbContext对象

public class EFDbContext : DbContext
{
    public EFDbContext():base("EFDbContext"){}  //配置使用的连接名
​
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // 如果数据表存在多列组合主键时,需要进行描述
        // modelBuilder.Entity<DeptInfo>().HasKey(t => new { t.DeptId, t.DeptCode});
         
        // CodeFirst创建数据表
        var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<ORMContext>(modelBuilder);
        Database.SetInitializer(sqliteConnectionInitializer);
    }
​
    public DbSet<DeptInfo> DeptInfos{ set; get; }
}

执行数据查询前,如果数据库文件不存在或者表不存在,不要执行context.Database.CreateIfNotExists(),否则创建表会失败,程序会抛出SQL logic error no such table: DeptInfo,后面即使屏蔽该行代码一样会抛异常,除非手动创建表或者删除数据库文件后重新生成。

5、批量插入数据

using(var ctx = new EFDbContext())
{
  ctx.Configuration.AutoDetectChangesEnabled = false;     // 局部关闭DetectChanges方法,使EF不会跟踪实体,这样将不会造成全盘扫描而使得我们不会处于漫长的等待
  ctx.DeptInfos.AddRange(deptInfos);    // 批量添加
  ctx.SaveChanges();
}

 

 

标签:SQLite,set,get,C#,EFDbContext,数据表,public
From: https://www.cnblogs.com/zhengzc/p/17822335.html

相关文章

  • WebSocket魔法师:打造实时应用的无限可能
    1、背景在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,但是依然有很多缺点,缺点就不在这里说了,感兴趣的小伙伴可以自行查阅一下。现在让我们......
  • USB转串口CH343驱动
    背景在网上用9.9淘的一块ESP32-C3(RISC-V)的小开发板上,用的CH343的USB转串口。最近打算学习用Rust开发ESP32-C3,在Ubuntu上搭建开发环境的时候发现,Ubuntu20.04上默认使用的是CDC-ACM驱动,即生成的节点为/dev/ttyACM0,但是用Rust开发ESP32-C3,需要使用VCP驱动,于是在网上找到了官方(......
  • Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionExcept
    在AndroidStudio的Helloword在增加了个部局XML内容后报错,如下错误:Causedby:org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException:Afailureoccurredwhileexecutingcom.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResource......
  • Docker安装并使用Mysql(可用详细)
    Docker安装并使用Mysql目录  一、Docker安装Mysql    1、启动Docker    2、查询mysql    3、安装mysql      1.默认拉取最新版本mysql      2.拉取指定版本mysql_5.7    4、查看镜像    5、本地创建挂载目录-......
  • 【腾讯云|云原生】自定制轻量化表单Docker快速部署
    ......
  • The art of shellcode
    目录1-如何编写shellcode1-1纯手搓1-1-1纯汇编1-1-2内联汇编1-1-3使用tiny_libc1-2借助工具1-2-1pwntools的shellcraft1-2-2alpha31-2-3AE641-2-4shellcodeencoder1-2-5msf生成1-3在线网站2-突破沙箱规则2-1使用at/v/2系统调用2-2使用orw读取flag2-3切换指令模式2-......
  • 恭喜我同事的论文被IEEE HPCC收录!
    近日,由天翼云科技有限公司云网产品事业部天玑实验室撰写的《关于公有云区分负载QoS感知的内存资源动态超分管理优化》(Thoth:ProvisioningOvercommittedMemoryResourcewithDifferentiatedQoSinPublicClouds)论文被2023年第25届国际高性能计算与通信会议IEEEHPCC(IEEEInter......
  • Cisco Packet Tracer and Wireshark
    协议时序图一、客户端:58592;服务器:4431、Src:172.29.70.74,Dst:14.119.104.189客户端生成公、私钥,将公钥放在key_share中发送给服务端。标识符:Identification:0x6a2a(27178)TransmissionControlProtocol,SrcPort:58592,DstPort:443,Seq:1,Ack:1,Len:517......
  • Glibc堆利用之house of系列总结
    目录1-前言2-houseof系列2.1-houseofspirit漏洞成因适用范围利用原理相关技巧利用效果2.2-houseofeinherjar漏洞成因适用范围利用原理相关技巧利用效果2.3-houseofforce漏洞成因适用范围利用原理相关技巧利用效果2.4-houseoflore漏洞成因适用范围利用原理相关技巧利用效......
  • Glibc高版本堆利用方法总结
    截止到目前,主要总结在2.35~2.37之间仍然残存的堆利用手法。可以在Bilibili上观看视频进行学习,或者在Youtube上观看视频进行学习。进入到glibc-2.31之后,很多原有的堆利用方法就失效,因此glibc给堆分配机制陆陆续续打上了很多patch,目前来看,与堆利用有关的patch有:tcachebin堆指......