使用Entity Framework与SQLite数据库

在本文中,将探讨如何在不使用SQLite的Entity Framework工具的情况下,通过代码配置来使用SQLite数据库与Entity Framework。Entity Framework 是一个强大的工具,它可以帮助开发者更高效地与数据库进行交互。

首先,需要从NuGet包管理器安装System.Data.Sqlite。打开控制台并输入以下命令:

Install-Package System.Data.SQLite

然后,需要一个SQLite数据库管理工具。

使用代码

创建一个名为 'SQLiteWithEF.db' 的SQLite数据库,并创建一个表:

CREATE TABLE EmployeeMaster ( ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, EmpName VARCHAR NOT NULL, Salary DOUBLE NOT NULL, Designation VARCHAR NOT NULL );

接下来,创建一个控制台应用程序,并添加对System.Data.SQLite的引用。

配置App.Config文件

安装完必要的库后,需要配置App.Config文件。除了默认条目外,删除所有条目。App.Config文件应该看起来像这样:

<?xml version="1.0" encoding="utf-8"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> </startup> </configuration>

创建SQLiteConfiguration类

创建一个名为SQLiteConfiguration.cs的类,并编写以下代码:

using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Core.Common; using System.Data.SQLite; using System.Data.SQLite.EF6; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SQLiteWithEF { public class SQLiteConfiguration : DbConfiguration { public SQLiteConfiguration() { SetProviderFactory("System.Data.SQLite", SQLiteFactory.Instance); SetProviderFactory("System.Data.SQLite.EF6", SQLiteProviderFactory.Instance); SetProviderServices("System.Data.SQLite", (DbProviderServices)SQLiteProviderFactory.Instance.GetService(typeof(DbProviderServices))); } } }

请注意,移除了App.Config文件中的条目,并创建了这个配置类,因为通过代码配置Entity Framework看起来更简单,而且App.Config文件不会显示使用的是哪个程序集。

创建模型类

现在,为EmployeeMaster表创建一个模型类:

using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; using System.Data.Linq.Mapping; using System.Data.SQLite; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SQLiteWithEF { [Table("EmployeeMaster")] public class EmployeeMaster { [Column("ID", IsDbGenerated = true, IsPrimaryKey = true, DbType = "INTEGER")] [Key] public int ID { get; set; } [Column("EmpName", DbType = "VARCHAR")] public string EmpName { get; set; } [Column("Salary", DbType = "DOUBLE")] public double Salary { get; set; } [Column("Designation", DbType = "VARCHAR")] public string Designation { get; set; } } }

创建DatabaseContext类

创建一个DatabaseContext.cs类,并将其扩展为DbContext类:

using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; using System.Data.SQLite; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SQLiteWithEF { class DatabaseContext : DbContext { public DatabaseContext() : base(new SQLiteConnection() { ConnectionString = new SQLiteConnectionStringBuilder() { DataSource = "D:\\Databases\\SQLiteWithEF.db", ForeignKeys = true }.ConnectionString, }, true) { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); base.OnModelCreating(modelBuilder); } public DbSet EmployeeMaster { get; set; } } }

请注意,必须通过代码创建连接字符串。如果在App.Config文件中创建它,它将不起作用。

使用Entity Framework上下文类

现在已经创建了Entity Framework上下文类,可以使用它了。转到Program.cs文件,并尝试通过Lambda或Linq或两者插入、更新、删除和查询数据。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SQLiteWithEF { class Program { static void Main(string[] args) { DatabaseContext context = new DatabaseContext(); Console.WriteLine("Enter Employee name"); string name = Console.ReadLine(); Console.WriteLine("Enter Salary"); double salary = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Enter Designation"); string designation = Console.ReadLine(); EmployeeMaster employee = new EmployeeMaster() { EmpName = name, Designation = designation, Salary = salary }; context.EmployeeMaster.Add(employee); context.SaveChanges(); var data = context.EmployeeMaster.ToList(); foreach (var item in data) { Console.Write(string.Format("ID : {0} Name : {1} Salary : {2} Designation : {3}{4}", item.ID, item.EmpName, item.Salary, item.Designation, Environment.NewLine)); } Console.ReadKey(); } } }

现在,通过按F5或Control+F5运行应用程序并查看结果。

注意事项

1.Entity Framework总是将ID列视为主键。如果声明了任何其他列为主键,则必须使用System.ComponentModel.DataAnnotations的[Key]属性对其进行注释。

2. 请确保将SQLiteConfiguration.cs文件放在与上下文类相同的文件夹中。

3. 可能会注意到,从DatabaseContext类中移除了将表名复数化的约定:

protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); base.OnModelCreating(modelBuilder); }

如果删除了这行代码,将得到System.Data.Entity.Infrastructure.DbUpdateException

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485