首先通过nuget安装Dapper以及Sqlite
创建实体模型
using System;
namespace SQLiteDemo.Model
{
public class Customer
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SQLiteDemo.Model
{
public class Teacher
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
}
创建通用接口
using SQLiteDemo.Model;
namespace SQLiteDemo.Data
{
public interface ICustomerRepository<T>
{
T Get<T>(long id, string sql);
void Save(T customer,string sql);
}
}
创建数据库连接类
using System;
using System.Data.SQLite;
namespace SQLiteDemo.Data
{
public class SqLiteBaseRepository
{
public static string DbFile
{
get { return Environment.CurrentDirectory + "\\SimpleDb.sqlite"; }
}
public static SQLiteConnection SimpleDbConnection()
{
return new SQLiteConnection("Data Source=" + DbFile);
}
}
}
数据库实体映射crud
using System.IO;
using System.Linq;
using Dapper;
using SQLiteDemo.Model;
namespace SQLiteDemo.Data
{
public class SqLiteCustomerRepository<T> : SqLiteBaseRepository, ICustomerRepository<T>
{
public T Get<T>(long id,string sql)
{
if (!File.Exists(DbFile)) return default(T);
using (var cnn = SimpleDbConnection())
{
cnn.Open();
T result = cnn.Query<T>(
sql, new { id }).FirstOrDefault();
return result;
}
}
public void Save(T customer,string sql)
{
using (var cnn = SimpleDbConnection())
{
cnn.Open();
cnn.Query<long>(
sql, customer).First();
}
}
public static void CreateDatabase(string createdb)
{
using (var cnn = SimpleDbConnection())
{
cnn.Open();
cnn.Execute(createdb
);
}
}
}
}
demo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SQLiteDemo.Data;
using SQLiteDemo.Model;
namespace SQLiteDemo
{
class Program
{
static void Main(string[] args)
{
SqLiteCustomerRepository<Customer>.CreateDatabase(@"CREATE TABLE IF NOT EXISTS Customer
(
ID integer primary key AUTOINCREMENT,
FirstName varchar(100) not null,
LastName varchar(100) not null,
DateOfBirth datetime not null
)");
SqLiteCustomerRepository<Customer> rep = new SqLiteCustomerRepository<Customer>();
var customer = new Customer
{
FirstName = "Sergey",
LastName = "Maskalik",
DateOfBirth = DateTime.Now
};
rep.Save(customer, @"INSERT INTO Customer
( FirstName, LastName, DateOfBirth ) VALUES
( @FirstName, @LastName, @DateOfBirth );
select last_insert_rowid()");
Customer retrievedCustomer = rep.Get<Customer>(customer.Id, @"SELECT Id, FirstName, LastName, DateOfBirth
FROM Customer
WHERE Id = @id");
SqLiteCustomerRepository<Teacher> repp = new SqLiteCustomerRepository<Teacher>();
var Teacher = new Teacher
{
FirstName = "Sergey",
LastName = "Maskalik",
DateOfBirth = DateTime.Now
};
SqLiteCustomerRepository<Teacher>.CreateDatabase(@"CREATE TABLE IF NOT EXISTS Teacher
(
ID integer primary key AUTOINCREMENT,
FirstName varchar(100) not null,
LastName varchar(100) not null,
DateOfBirth datetime not null
)");
repp.Save(Teacher, @"INSERT INTO Teacher
( FirstName, LastName, DateOfBirth ) VALUES
( @FirstName, @LastName, @DateOfBirth );
select last_insert_rowid()");
Teacher retrievedTeacher = repp.Get<Teacher>(Teacher.Id, @"SELECT Id, FirstName, LastName, DateOfBirth
FROM Teacher
WHERE Id = @id");
}
}
}
https://github.com/xdqt/Dapper-SQLiteDemo.git