首先引用管理Nuget包,将所需要的EntityFramework包以及Sqlite的包下载好,
只需要下载SQlite包,其他的依赖包会自动下载。
之后会自动生成一个app.config配置文件
但是在原本生成的config文件中没有
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
另外数据库连接语句:这里data source可以写绝对路径,也可以直接写SqliteTest.db,但此时db文件必须放在项目的bin\debug文件夹当中。
<connectionStrings>
<add name="SqliteTest" connectionString="Data Source=D:\SqliteTest.db" providerName="System.Data.SQLite.EF6" />
</connectionStrings>
完整的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="mssqllocaldb" />
</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" />
<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="SqliteTest" connectionString="Data Source=D:\SqliteTest.db" providerName="System.Data.SQLite.EF6" />
</connectionStrings>
</configuration>
config文件配置好后,在VS中编写表的对应表名(实体类),实体类表中属性需要和数据库中完全一致,在这里遇到一个小问题,查询时不区分大小写,但是增删改时,严格区分。
//特性 -引用名为Person的表名
//[Table("Actor")]
//Actor(数据库的表名)
public class Actor
{
public Int64 ID { get; set; } //注意要用Int64
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Countries
{
//数据库中countries的实体类
public Int64 ID { get; set; }
public string Name { get; set; }
public Int64 Cost { get; set; }
}
这里需要注意的是,因为在数据库中表名是以复数形式存在的,比如我们在代码的实体类和数据库的表名都取为Actor,这时虽然数据库表名显示的是Actor,但是它默认是以Actors形式存在,所以我们在查询的时候就会出现异常
两种解决方案:
1.将数据库的表名直接改为Actors(复数形式)
2.使用特性,直接将数据库的表名写死
编写上下文
public class TestContext : DbContext
{
//数据上下文,创建Actor的表对象
//数据库中的表名是以负数形式来进行表现的(比如这里dbset建表为actor,那么数据库中必须为actors才能正确查询)
public DbSet<Actor> Actors { get; set; }
public DbSet<Countries> Countries { get; set; }
/// <summary>
/// 定义构造函数,继承自父类的构造函数,通过继承父类的构造函数来创建数据库
/// 父类构造函数的参数是配置文件中配置的数据库连接字符串
/// </summary>
public TestContext(): base("SqliteTest")
{
}
}
数据库内容
然后连接数据库,根据自己的数据库进行选择和连接。(如果测试数据库是放在bin\debug文件中,可以忽略此步骤)
连接好后,进行增删改查,直接在主函数调用方法就可以了
//查询内容
public static void select()
{
using (TestContext mc = new TestContext())
{
//var mcmc = mc.Person.Where(p => p.FirstName == "阿达").Select(p => p.LastName);
//linq语句查询
var linq = from n in mc.Actors
where n.ID == 4
select n.FirstName + " " + n.LastName;
//lambda语句查询
var lambda = mc.Actors.Where(p => p.ID == 4).Select(p => p.FirstName);
foreach (var item in lambda)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
//添加内容
public static void add()
{
using (TestContext mc = new TestContext())
{
Actor a = new Actor();
a.ID = 6;
a.FirstName = "chen";
a.LastName = "long";
mc.Actors.Add(a);
mc.SaveChanges();
}
Console.WriteLine("add successfully!");
Console.ReadLine();
}
//删除内容
public static void remove()
{
using (TestContext mc = new TestContext())
{
var result = from n in mc.Actors
where n.ID == 5
select n;
foreach (var item in result)
{
mc.Actors.Remove(item);
}
//必须savechange否则不会成功
mc.SaveChanges();
Console.WriteLine("Delete successfully");
Console.ReadLine();
}
}
//修改内容
public static void modify()
{
using (TestContext mc = new TestContext())
{
//修改指定查询到的内容
var result = from n in mc.Actors
where n.ID == 4
select n;
foreach (var item in result)
{
item.FirstName = "修改";
}
修改查询多条内容中的第一条内容
//var result1 = from n in mc.Actors
// select n;
//var target=result1.FirstOrDefault<Actor>();
//target.LastName = "修改111";
//必须savechange,否则不会成功
mc.SaveChanges();
Console.WriteLine("Modify successfully");
Console.ReadLine();
}
}
具体的增删改查可以参考和对照博客:http://www.cnblogs.com/Elijah/archive/2012/01/04/2311468.html,老师写得非常详细。