实体框架多开分身不支持xp框架怎么办SQLite问题,怎么解决

用户代码未处理 System.InvalidOperationException
  HResult=-
  Message=未找到具有固定名称“System.Data.SQLite”的 ADO.NET 提供程序的实体框架提供程序。请确保在应用程序配置文件的“entityFramework”节中注册了该提供程序。有关详细信息,请参阅
  Source=EntityFramework
  StackTrace:       
&connectionStrings&
&add name=&UserConnection& connectionString=&data source=|DataDirectory|\UserRole.s3db& providerName=&System.Data.SQLite&/&
&!--&add name=&UserModel& connectionString=&data source=(LocalDb)\v11.0;initial catalog=UserRole.Models.UserMintegrated security=TMultipleActiveResultSets=TApp=EntityFramework& providerName=&System.Data.SqlClient& /&--&
&/connectionStrings&
&system.data&
&DbProviderFactories&
&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,
Version=1.0.93.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139&/&--&
&add name=&SQLite Data Provider& invariant=&System.Data.SQLite& description=&.Net Framework Data Provider for SQLite& type=&System.Data.SQLite.SQLiteFactory,System.Data.SQLite& /&
&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& /&
&/DbProviderFactories&
&/system.data&
&entityFramework&
&defaultConnectionFactory type=&System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework&&
&parameters&
&parameter value=&v11.0& /&
&/parameters&
&/defaultConnectionFactory&
&providers&
&provider invariantName=&System.Data.SQLite.EF6& type=&System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6& /&
&provider invariantName=&System.Data.SqlClient& type=&System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer& /&
&/providers&
&/entityFramework&
&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& /&
阅读(...) 评论()Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
前不久,我在写了ORMLite这个框架的博文
但是对于我个人来说,我可能更加倾向于用GreenDao,所以今天也为大家带来了GreenDao的详细博客,希望大家喜欢,之前也详细介绍了ORM的思想,如果不明白可以先看一下前面的博文,这里就不多赘述了,我们新建一个工程
一.相关介绍
官方网站 :
传说中的优点
最大性能(最快的 Android ORM)
易于使用API
最小内存消耗
那我们可以先来看看怎么集成吧!
集成文档:
首先,我们查看Github上的集成步骤,先添加依赖
我们要添加
compile 'org.greenrobot:greendao:2.2.1'
同时也要添加java的项目包
compile 'org.greenrobot:greendao-generator:2.2.0'
紧接着,我们在main目录下创建一个文件夹java-gen
然后继续在配置文件中添加
sourceSets{
java.srcDirs = ['src/main/java','src/main/java-gen']
最后,新建一个Module,选择JAVA Library,创建成功后,我们在他的build.gradle下添加
compile 'org.greenrobot:greendao-generator:2.2.0'
到这里,我们的初步集成算是完成了,是不是比较麻烦,我们看
她说现在去看java-gen有生成代码,实际上我们去看并没有,因为我们需要NoteDao.java,一个数据缓存对象,那我们需要怎么去做呢?我们直接在Module的类里写了
package com.
import de.greenrobot.daogenerator.DaoG
import de.greenrobot.daogenerator.E
import de.greenrobot.daogenerator.S
public class DaoMaker {
public static void main(String[] args) {
Schema schema = new Schema(1, "com.student.entity");
addStudent(schema);
schema.setDefaultJavaPackageDao("com.student.dao");
new DaoGenerator().generateAll(schema, "D:\\github\\GreenDao\\app\\src\\main\\java-gen");
} catch (Exception e) {
e.printStackTrace();
* 创建数据库的表
public static void addStudent(Schema schema) {
Entity entity = schema.addEntity("Student");
entity.addIdProperty();
entity.addStringProperty("name");
entity.addIntProperty("age");
entity.addStringProperty("address");
写完这个时候我们要注意了,我们不能直接去运动这个工程,我们要单独编译这个java类。也就是右键
编译的时间有点点长,我们耐心等待一下就好了,这个时候我们可以看到控制台会打印相关的信息
这个时候你再去看java-gen目录,就会有东西了
很nice,这算是前期基本已经完工了,我们可以看他的原型图
可以看到,GreenDao是有自己创建的类的,我们来看看是什么类
DaoSession:会话层,操作具体dDao类,提供了基本的持久化操作方法,比如对实体对象的insert,load,update,refresh,delete的一些操作
XXDao:实际生成的Dao类,通常对应具体的java类,greenDao为每一个实体类创建一个Dao,他提供了比DaoSession更为具体的付费,比如count,loadALL和inserlnTx,批量插入
xxEntity:持久的实体对象,通常代表数据库row标准的java属性
Schema:实例数据schema,通过schema的版本和缺省的java包调用构造器
四.封装操作类
OK,了解的差不多了,我们就来实战操作一下吧!实战的时候,我们不需要在主Activity中放太多的逻辑代码,全部封装在一个数据库的操作类中其实是最好的,所以我们先新建一个类
package com.lgl.
import android.content.C
import com.student.dao.DaoM
import com.student.dao.DaoS
import de.greenrobot.dao.query.QueryB
* 数据库操作类
* Created by LGL on .
public class DaoManager {
* 实现功能
* 1.创建数据库
* 2.创建数据库的表
* 3.对数据库的升级
* 4.对数据库的增删查改
public static final String TAG = DaoManager.class.getSimpleName();
private static final String DB_NAME = "greendao.db";
private volatile static DaoM
private static DaoMaster.DevOpenH
private Context mC
private static DaoMaster daoM
private DaoSession daoS
public static DaoManager getInstance() {
DaoManager instance = null;
if (manager == null) {
synchronized (DaoManager.class) {
if (instance == null) {
instance = new DaoManager();
public void
initManager(Context context){
this.mContext =
* 判断是否存在数据库,如果没有则创建
public DaoMaster getDaoMaster() {
if (daoMaster == null) {
helper = new DaoMaster.DevOpenHelper(mContext, DB_NAME, null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
return daoM
* 完成对数据库的操作,只是个接口
public DaoSession getDaoSession() {
if (daoSession == null) {
if (daoMaster == null) {
daoMaster = getDaoMaster();
daoSession = daoMaster.newSession();
return daoS
* 打开输出日志,默认关闭
public void setDebug() {
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
* 关闭DaoSession
public void closeDaoSession() {
if (daoSession != null) {
daoSession.clear();
daoSession = null;
* 关闭Helper
public void closeHelper() {
if (helper != null) {
helper.close();
helper = null;
* 关闭所有的操作
public void closeConnection() {
closeHelper();
closeDaoSession();
这个类能初始化数据库的很多操作,不过这样还不够,我们需要再写个实在点的操作类,现在只是单单实现一个插入的动作
package com.lgl.
import android.content.C
import com.student.entity.S
* 完成对某一张表的具体操作
* Created by LGL on .
public class CommonUtils {
private DaoManager daoM
public CommonUtils(Context context) {
daoManager = DaoManager.getInstance();
daoManager.initManager(context);
* 对数据库中student表的插入操作
public boolean insertStudent(Student student) {
boolean flag = false;
flag = daoManager.getDaoSession().insert(student) != -1 ? true : false;
OK,那我们先去看看sql的插入是怎么做的,定义一个button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加数据" /&
我们只需要看他的点击事件就可以了
case R.id.btn_add:
dbUtils = new CommonUtils(this)
Student student = new Student()
student.setName("lgl")
student.setAge(18)
student.setAddress("北京")
dbUtils.insertStudent(student)
我们一运行之后,就可以在data/data/报名/databases中找到数据库了
只要把他到处到桌面上,就可以查看数据了
这里感觉不好,ID应该设置自动增长的对吧!其实只要不设置ID,他就会自增长的
六.批量插入
插入可以了,我们批量插入就简单了,CommonUtils中增加与一个方法
* 批量插入
* students
public boolean inserMultStudent(final List&Student& students) {
boolean flag = false;
daoManager.getDaoSession().runInTx(new Runnable() {
public void run() {
for (Student student : students) {
daoManager.getDaoSession().insertOrReplace(student);
flag = true;
} catch (Exception e) {
e.printStackTrace();
我们可以去验证一下吧,那首先先去写一个button吧
android:id="@+id/btn_add_mult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="批量添加数据" /&
这样,我们就可以直接看他的点击事件了
case R.id.btn_add_mult:
List&Student& list = new ArrayList&&();
for (int i = 0; i & 10; i++) {
Student studentlist = new Student();
studentlist.setName("lgl" + i);
studentlist.setAge(18 + i);
studentlist.setAddress("北京" + i);
list.add(studentlist);
dbUtils.inserMultStudent(list);
我们现在把数据库导出来看看
OK,这个非常的nice
增删查改嘛,增加说完了,我们来说修改,我们继续写修改的方法然后去验证,这样对于读者来说也是阅读性比较好的
public boolean updateStudent(Student student){
boolean flag = false;
daoManager.getDaoSession().update(student);
flag = true;
}catch (Exception e){
e.printStackTrace();
OK,我们去验证一下,写个按钮咯?
android:id="@+id/btn_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改一条数据" /&
直接看点击事件
case R.id.btn_update:
Student studentupdate = new Student();
studentupdate.setId((long) 1);
studentupdate.setAge(100);
dbUtils.updateStudent(studentupdate);
很好,很强势,我们导出数据库,看看有没有修改成100岁
好,那我们可以看到,虽然被改成了100,但是其他字段为null,因为我们修改的时候没有设置,好吧,设置一下
现在我们可以看到修改了
删除就比较简单了,我们直接写
public boolean deleteStudent(Student student) {
boolean flag = false;
daoManager.getDaoSession().delete(student);
flag = true;
} catch (Exception e) {
e.printStackTrace();
这样就写个按钮
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除一条数据" /&
OK,点击事件是比较简单的
case R.id.btn_delete:
Student studentdelete = new Student()
studentdelete.setId((long) 3)
dbUtils.deleteStudent(studentdelete)
我们要删除的是他ID为3的数据,那我们运行
可以看到,ID为3的数据已经不见了
OK,增删查改我们只剩下查询了,我们先来看一下怎么查询一条语句,写个方法
* 查询单条
public Student listOneStudent(long key) {
return daoManager.getDaoSession().load(Student.class, key);
我们再定义一个button
android:id="@+id/btn_load"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询一条数据" /&
这样我们就可以去查询了
case R.id.btn_load:
Log.i(TAG, dbUtils.listOneStudent(5) + "")
十.全部查询
全部查询比较简单
* 全部查询
public List&Student& listAll() {
return daoManager.getDaoSession().loadAll(Student.class);
直接去调用就好了
case R.id.btn_load_all:
List&Student& lists = dbUtils.listAll()
Log.i(TAG, lists.toString())
十一.QueryBuilder
作为最重要的查询,GreenDao肯定是为我们做了很多事情,我们可以翻阅API找到QueryBuilder,这个复合查询该怎么用呢?我们根据条件来进行逻辑查询,原生的有,ORMLite也有,GreenDao也有,我就拿原生的和GreenDao来做对比
* 原生查询
public void queryNative() {
String where = "where name like ? and _id & ?";
List&Student& list = daoManager.getDaoSession().queryRaw(Student.class, where,
new String[]{"%l%", "6"});
Log.i(TAG, list + "");
* QueryBuilder查询大于
public void queryBuilder() {
QueryBuilder&Student& queryBuilder = daoManager.getDaoSession().queryBuilder(Student.class);
List&Student& list = queryBuilder.where(StudentDao.Properties.Age.ge(19)).where(StudentDao.Properties.Address.like("北京")).list();
Log.i(TAG, list + "");
不难看出,使用起来是比较方便的,我们可以无限的加where条件查询
增删查改已经基本上都讲完了,那基本上这个框架也OK了,我们来看一下他运行的截图
逻辑说的还算是比较详细的,但是这个CommonUtils比较零散
CommonUtils
package com.lgl.
import android.content.C
import android.util.L
import com.student.dao.StudentD
import com.student.entity.S
import java.util.L
import de.greenrobot.dao.query.QueryB
* 完成对某一张表的具体操作
* Created by LGL on .
public class CommonUtils {
private static final String TAG = CommonUtils.class.getSimpleName();
private DaoManager daoM
public CommonUtils(Context context) {
daoManager = DaoManager.getInstance();
daoManager.initManager(context);
* 对数据库中student表的插入操作
public boolean insertStudent(Student student) {
boolean flag = false;
flag = daoManager.getDaoSession().insert(student) != -1 ? true : false;
* 批量插入
* students
public boolean inserMultStudent(final List&Student& students) {
boolean flag = false;
daoManager.getDaoSession().runInTx(new Runnable() {
public void run() {
for (Student student : students) {
daoManager.getDaoSession().insertOrReplace(student);
flag = true;
} catch (Exception e) {
e.printStackTrace();
public boolean updateStudent(Student student) {
boolean flag = false;
daoManager.getDaoSession().update(student);
flag = true;
} catch (Exception e) {
e.printStackTrace();
public boolean deleteStudent(Student student) {
boolean flag = false;
daoManager.getDaoSession().delete(student);
flag = true;
} catch (Exception e) {
e.printStackTrace();
* 查询单条
public Student listOneStudent(long key) {
return daoManager.getDaoSession().load(Student.class, key);
* 全部查询
public List&Student& listAll() {
return daoManager.getDaoSession().loadAll(Student.class);
* 原生查询
public void queryNative() {
String where = "where name like ? and _id & ?";
List&Student& list = daoManager.getDaoSession().queryRaw(Student.class, where,
new String[]{"%l%", "6"});
Log.i(TAG, list + "");
* QueryBuilder查询大于
public void queryBuilder() {
QueryBuilder&Student& queryBuilder = daoManager.getDaoSession().queryBuilder(Student.class);
List&Student& list = queryBuilder.where(StudentDao.Properties.Age.ge(19)).where(StudentDao.Properties.Address.like("北京")).list();
Log.i(TAG, list + "");
OK,这个博客算是结束了,我们下一篇再聊
Demo下载:
欢迎加群:
扫码向博主提问
一命二运三风水,四积阴德五读书!
擅长领域:
ndroid数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
前不久,我在写了ORMLite这个框架的博文
Android数据库框架——O...
Android sqlite 使用框架
Android数据库存储
今天无聊就试试水,写写博客,在之前andorid使用数据储存好像大概有5种方式,其中轻量级的是sqlite数据库,但是sqlite使用起来好像有麻烦,首先要...
Android原生SQLite操作以及greenDao框架操作SQLite
本文分为2个大的方面来讲SQLite操作:原生操作,框架操作原生操作首先我们要创建一个数据库打开帮助类 ,目的是创建数据库和表,升级数据库import android.content.C...
Android 数据库框架LitePal使用详解
以前一直觉得Android对SQLite数据库的操作非常简单,封装的很完善了。当我看到了郭神的LitePal框架之后我就在心理暗笑了,原来数据库还可以这样玩,真是大开眼界了。甚至你都不用写一句SQL语...
android sqlite 的创建与使用,sqlite自定义框架。
文章为深度解析与高效运用sqlite数据库,提供完美的使用方法,高能的可移植性与可重用性,简单易上手,易操作。新手学习与运用,高手借鉴与批评。...
greenDAO作为Android移动端的一款开源的orm框架,因其快速开发,而且小而快,为众多安卓程序员所知,成为一款热门,现在迎来了更便捷的3.0+版本,主要亮点就是提供了注解。官网又快速使...
介绍Litepal是一个轻型的数据库操作框架,运用ORM对象映射模型,所有的数据库操作都通过对象直接进行操作,可以大大简化数据的存储与维护过程。项目地址,传送门。litepal导入1.添加依赖ecli...
一个简单的&em&Android&/em& &em&SQLite&/em& ORM&em&框架&/em&不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-&em&SQLite&/em&-ORM-&em&Android&/em&,因为要传到github,所以...
官方介绍:
Afinal是一个Android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,Final...
【Android 数据库框架总结,总有一个适合你!】
一:OrmLite
简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档
jar包 地址:ht...
没有更多推荐了,Asp.net 高性能 Sqlite ORM 框架之 sqliteSugar
easyliter框架的升级版本,并且正式命名为SqliteSugar框架,另外Sugar系列还有 MySql和MsSql版本,版本待开发中(因为客户端太大一直在忧郁当中)
用Sqlite 也不址什么高性能了,好用为主。
经过一天的努力,Sqlite 版本所有的例子都已经测试通过:
Sqlite .net4.0+
https://github.com/sunkaixuan/SqliteSugar
MySql .NET 4.0+
https://github.com/sunkaixuan/MySqlSugar
MSQL .NET 4.0+下载地址:
https://github.com/sunkaixuan/SqlSugar
MSSQL .NET Core版本
https://github.com/sunkaixuan/ASP_NET_CORE_ORM_SqlSugar
1、优越的性能,查询使用 reflection.emit 创建IL语言+委托绑定 然后对该对象进行 cache ,datareader直接赋值给cache对象,高性能拉姆达解析,查询速度达到原生最高性能的写法水准
2、大量语法糖,拉姆达表达示筛选,新颖的多表查询 ,方便的分页等
3、支持事务
4、内置实体类生成函数,无需使用第三方代码生成器
5、简单好用、例子齐全有问必答。
sqlSugar是由sqlSugarClient提供统一调用模式 ,sqlSugarClient是由5个部分组成
1、自身函数
2、实体生成
3、单表查询
4、多表查询
5、基类函数
SqliteSugar教程
和MSSQL版本基本一样但是个别例子也会有些细节上的区别
一、查询 1、拉姆达查询(以后会支持多表JOIN)
语法简洁和EF相似,同时兼容 Where(&Id&@id&,new{id=1}) 这种字符串的写法
//针对单表或者视图查询
db.GetDataTable(&select * from Student&);
//查询所有
var student = db.Queryable().ToList();
var studentDynamic = db.Queryable().ToDynamic();
var studentJson = db.Queryable().ToJson();
//查询单条
var single = db.Queryable().Single(c =& c.id == 1);
//查询单条没有记录返回空对象
var single2 = db.Queryable().Where(c =& c.id == 1).SingleOrDefault();
//查询第一条
var first = db.Queryable().Where(c =& c.id == 1).First();
var first2 = db.Queryable().Where(c =& c.id == 1).FirstOrDefault();
//取10-20条
var page1 = db.Queryable().Where(c =& c.id & 2).OrderBy(it=&it.id).Skip(2).Take(3).ToList();
//上一句的简化写法,同样取10-20条
var page2 = db.Queryable().Where(c =& c.id & 1).OrderBy(it =& it.id).ToPageList(2, 3);
//查询条数
var count = db.Queryable().Where(c =& c.id & 10).Count();
//从第2条开始以后取所有
var skip = db.Queryable().Where(c =& c.id & 10).OrderBy(it =& it.id).Skip(2).ToList();
var take = db.Queryable().Where(c =& c.id & 10).OrderBy(it =& it.id).Take(2).ToList();
// Not like
string conval = &三&;
var notLike = db.Queryable().Where(c =& !c.name.Contains(conval.ToString())).ToList();
conval = &三&;
var like = db.Queryable().Where(c =& c.name.Contains(conval)).ToList();
// 可以在拉姆达使用 ToString和 Convert,比EF出色的地方
var convert1 = db.Queryable().Where(c =& c.name == &a&.ToString()).ToList();
var convert2 = db.Queryable().Where(c =& c.id == Convert.ToInt32(&1&)).ToList();//
var convert3 = db.Queryable().Where(c =& DateTime.Now & Convert.ToDateTime(&&)).ToList();
var convert4 = db.Queryable().Where(c =& DateTime.Now & DateTime.Now).ToList();
//支持字符串Where 让你解决,更复杂的查询
var student12 = db.Queryable().Where(c =& &a& == &a&).Where(&id&100&).ToList();
var student13 = db.Queryable().Where(c =& &a& == &a&).Where(&id&100 and id in( select 1)&).ToList();
//存在记录反回true,则否返回false
bool isAny100 = db.Queryable().Any(c =& c.id == 100);
bool isAny1 = db.Queryable().Any(c =& c.id == 1);
int maxId = db.Queryable().Max(&id&);
int minId = db.Queryable().Where(c =& c.id & 0).Min(&id&);
//order By
var orderList = db.Queryable().OrderBy(&id desc,name asc&).ToList();//字符串支持多个排序
//可以多个order by表达示
var order2List = db.Queryable().OrderBy(it =& it.name).OrderBy(it =& it.id, OrderByType.desc).ToList(); // order by name as ,order by id desc
var intArray = new[] { &5&, &2&, &3& };
var intList = intArray.ToList();
var list0 = db.Queryable().In(it =& it.id, 1, 2, 3).ToList();
var list1 = db.Queryable().In(it =& it.id, intArray).ToList();
var list2 = db.Queryable().In(&id&, intArray).ToList();
var list3 = db.Queryable().In(it =& it.id, intList).ToList();
var list4 = db.Queryable().In(&id&, intList).ToList();
//分组查询
var list7 = db.Queryable().Where(c =& c.id & 20).GroupBy(it =& it.sex).Select(&sex,count(*) as Count&).ToDynamic();
var list8 = db.Queryable().Where(c =& c.id & 20).GroupBy(it =& it.sex).GroupBy(it =& it.id).Select(&id,sex, count(*) as Count&).ToDynamic();
List list9 = db.Queryable().Where(c =& c.id & 20).GroupBy(it =& it.sex).Select(&Sex, count(*) as Count&).ToList();
List list10 = db.Queryable().Where(c =& c.id & 20).GroupBy(&sex&).Select(&Sex, count(*) as Count&).ToList();
//SELECT Sex,Count=count(*)
FROM Student
GROUP BY Sex --生成结果
2、sqlable 接近SQL的一个路线。
放弃了传统的EF写法,让他更接近SQL,可以取代传统的SQL拼接,让格式更好控。
using (var db = SugarDao.GetInstance())
//---------Sqlable,创建多表查询---------//
//多表查询
List dataList = db.Sqlable()
.From(&school&, &s&)
.Join(&student&, &st&, &st.id&, &s.id&, JoinType.INNER)
.Join(&student&, &st2&, &st2.id&, &st.id&, JoinType.LEFT)
.Where(&s.id&100 and s.id&@id&)
.Where(&1=1&)//可以多个WHERE
.OrderBy(&id&)
.SelectToList(&st.*&, new { id = 1 });
//多表分页
List dataPageList = db.Sqlable()
.From(&school&, &s&)
.Join(&student&, &st&, &st.id&, &s.id&, JoinType.INNER)
.Join(&student&, &st2&, &st2.id&, &st.id&, JoinType.LEFT)
.Where(&s.id&100 and s.id&100&)
.SelectToPageList(&st.*&, &s.id&, 1, 10);
//多表分页WHERE加子查询
List dataPageList2 = db.Sqlable()
.From(&school&, &s&)
.Join(&student&, &st&, &st.id&, &s.id&, JoinType.INNER)
.Join(&student&, &st2&, &st2.id&, &st.id&, JoinType.LEFT)
.Where(&s.id&100 and s.id&100 and s.id in (select 1 )& /*这里面写子查询都可以*/)
.SelectToPageList(&st.*&, &s.id&, 1, 10);
//--------转成List Dynmaic 或者 Json-----//
var list1 = db.Sqlable().From(&student&, &s&).Join(&school&, &l&, &s.sch_id&, &l.id and l.id=@id&, JoinType.INNER).SelectToDynamic(&*&, new { id = 1 });
var list2 = db.Sqlable().From(&student&, &s&).Join(&school&, &l&, &s.sch_id&, &l.id and l.id=@id&, JoinType.INNER).SelectToJson(&*&, new { id = 1 });
var list3 = db.Sqlable().From(&student&, &s&).Join(&school&, &l&, &s.sch_id&, &l.id and l.id=@id&, JoinType.INNER).SelectToDataTable(&*&, new { id = 1 });
var list4 = db.Sqlable().From(&student&, &s&).Join(&school&, &l&, &s.sch_id&, &l.id and l.id=@id&, JoinType.INNER).SelectToPageDynamic(&s.*&, &l.id&, 1, 10, new { id = 1 });
var list5 = db.Sqlable().From(&student&, &s&).Join(&school&, &l&, &s.sch_id&, &l.id and l.id=@id&, JoinType.INNER).SelectToPageTable(&s.*&, &l.id&, 1, 10, new { id = 1 });
var list6 = db.Sqlable().From(&student&, &s&).Join(&school&, &l&, &s.sch_id&, &l.id and l.id=@id&, JoinType.INNER).SelectToPageDynamic(&s.*&, &l.id&, 1, 10, new { id = 1 });
//--------拼接-----//
Sqlable sable = db.Sqlable().From(&s&).Join(&l&, &s.sch_id&, &l.id&, JoinType.INNER);
string name = &a&;
int id = 1;
if (!string.IsNullOrEmpty(name))
sable = sable.Where(&s.name=@name&);
if (!string.IsNullOrEmpty(name))
sable = sable.Where(&s.id=@id or s.id=100&);
var pars = new { id = id, name = name };
int pageCount = sable.Count(pars);
var list7 = sable.SelectToPageList(&s.*&,&l.id desc&,1,20, pars);
3、对原生SQL查询
using (var db = SugarDao.GetInstance())
//转成list
List list1 = db.SqlQuery(&select * from Student&);
//转成list带参
List list2 = db.SqlQuery(&select * from Student where id=@id&, new { id = 1 });
//转成dynamic
dynamic list3 = db.SqlQueryDynamic(&select * from student&);
//转成json
string list4 = db.SqlQueryJson(&select * from student&);
var list5 = db.SqlQuery(&select
id from Student limit 0,1&).First();
//反回键值
Dictionary list6 = db.SqlQuery<keyvaluepair&(&select id,name from Student&).ToDictionary(it =& it.Key, it =& it.Value);
//反回List
var list7 = db.SqlQuery(&select
name from Student&).First();
//存储过程
//var spResult = db.SqlQuery(&exec sp_school @p1,@p2&, new { p1=1,p2=2 });
}</keyvaluepair
4、容器的转换
using (SqlSugarClient db = SugarDao.GetInstance())
var list2= db.Queryable().Where(c =& c.id & 10).Select(c =& new classNew { newid = c.id, newname = c.name, xx_name = c.name }).ToList();//不支持匿名类转换,也不建议使用
var list3 = db.Queryable().Where(c =& c.id & 10).Select(c =& new
{ newid = c.id, newname = c.name, xx_name = c.name }).ToDynamic();//匿名类转换
可以指定列更新,也可对实体整个更新,也可以排除不更新字段非常的方便好用
int id = 1;
using (var db = SugarDao.GetInstance())
//指定列更新
db.Update(new { name = &蓝翔2& }, it =& it.id == id);
db.Update(new { name = &蓝翔2& }, 1, 3, 12);
db.Update(new { name = &蓝翔2& }, new string[] { &1&, &2& });
//整个实体更新
db.Update(new School { id = id, name = &蓝翔2& });
db.Update(new School { id = id, name = &蓝翔2& }, it =& it.id == id);
//设置不更新列
db.DisableUpdateColumns = new string[] { &CreateTime& };//设置CreateTime不更新
TestUpdateColumns updObj = new TestUpdateColumns()
VGUID = Guid.Parse(&6DF396EB-D1C8-48A5-8BE1-D58D&),
Name = &xx&,
Name2 = &xx2&,
IdentityField = 0,
CreateTime = null
//CreateTime将不会被更新
db.Update(updObj);
//以前实现这种更新需要用指定列的方式实现,现在就简单多了。
using (var db = SugarDao.GetInstance())
db.Delete(10);//注意主键必需为实体类的第一个属性
db.Delete(it =& it.id & 100);
db.Delete(new string[] { &100&, &101&, &102& });
//db.FalseDelete(&is_del&, 100);
//等同于 update school set is_del=0 where id in(100)
//db.FalseDelete(&is_del&, it=&it.id==100);
Student s = new Student()
name = &张& + new Random().Next(1, int.MaxValue)
db.Insert(s); //插入一条记录 (有主键也好,没主键也好,有自增列也好都可以插进去)
List list = new List()
new Student()
name=&张&+new Random().Next(1,int.MaxValue)
new Student()
name=&张&+new Random().Next(1,int.MaxValue)
db.InsertRange(list); //批量插入
五、枚举支持
using (SqlSugarClient db = SugarDao.GetInstance())
var stuList= db.Queryable().ToList();
db.Insert(new Student() { sch_id = SchoolEnum.蓝翔2 });
db.Update(new Student() {
sch_id=SchoolEnum.蓝翔2 , id=1} );
var stuList2 = db.Queryable().Where(it=&it.sch_id==SchoolEnum.蓝翔1).ToList();
六、实体生成
using (var db = SugarDao.GetInstance())
//根据当前生成所有表的实体类文件 (参数:SqlSugarClient ,文件目录,命名空间)
db.ClassGenerating.CreateClassFiles(db,&e:\\Model&,&Models&);
//根据表名生成实体类文件
//db.ClassGenerating.CreateClassFilesByTableNames(db, Server.MapPath(&~/Models&), &Models& , &student&,&school&);
//根据表名生成class字符串
var str = db.ClassGenerating.TableNameToClass(db, &Student&);
//根据SQL语句生成class字符串
var str2 = db.ClassGenerating.SqlToClass(db, &select
* from Student&, &student&);
除了上面代码还有T4生成看DEMO不懂可以随时问我
七、全局过滤器
using System.Collections.G
using System.L
using System.W
using System.Web.UI;
using System.Web.UI.WebC
using MySqlS
namespace WebTest.Demo
/// 过滤器
public partial class Filter : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
using (SqlSugarClient db = SugarDaoFilter.GetInstance())//开启数据库连接
//设置走哪个过滤器
db.CurrentFilterKey = &role&;
//queryable
var list = db.Queryable().ToList(); //通过全局过滤器对需要权限验证的数据进行过滤
//相当于db.Queryable().Where(&id=@id&,new{id=1})
var list2 = db.Sqlable().From(&s&).SelectToList(&*&);
//sqlQuery
var list3 = db.SqlQuery(&select * from Student where 1=1&);
/// 扩展SqlSugarClient
public class SugarDaoFilter
//禁止实例化
private SugarDaoFilter()
/// 页面所需要的过滤函数
private static Dictionary& _filterParas = new Dictionary&()
{ &role&,()=&{
return new KeyValueObj(){ Key=& id=@id& , Value=new{ id=1}};
{ &org&,()=&{
return new KeyValueObj(){ Key=& orgId=@orgId& , Value=new{ orgId=1}};
public static SqlSugarClient GetInstance()
string connection = System.Configuration.ConfigurationManager.ConnectionStrings[@&sqlConn&].ToString(); //这里可以动态根据cookies或session实现多库切换
var reval = new SqlSugarClient(connection);
reval.SetFilterFilterParas(_filterParas);
八、别名表
using (SqlSugarClient db = SugarDao.GetInstance())
//-----单个-------//
var list = db.Queryable(&Student&).ToList();//查询的是 select * from student 而我的实体名称为V_Student
//-----全局多个设置-------//
//设置 Mapping Table 如果没这方面需求可以传NULL
List mappingTableList = new List(){
new KeyValue(){ Key=&FormAttr&, Value=&Flow_FormAttr&},
new KeyValue(){ Key=&Student3&, Value=&Student&}
db.SetMappingTables(mappingTableList);
using (SqlSugarClient db = SugarDao.GetInstance())//开启数据库连接
db.IsNoLock =//启用无锁查询
db.CommandTimeOut = 30000;//设置超时时间
db.BeginTran();//开启事务
//db.BeginTran(IsolationLevel.ReadCommitted);+3重载可以设置事世隔离级别
db.CommitTran();//提交事务
catch (Exception)
db.RollbackTran();//回滚事务
十、保留了ADO功能
using (SqlSugarClient db = SugarDao.GetInstance())//开启数据库连接
var r1= db.GetDataTable(&select * from student&);
var r2= db.GetSingle(&select
* from student limit 0,1&);
var r3 = db.GetScalar(&select
count(1) from student&);
var r4 = db.GetReader(&select
count(1) from student&);
r4.Dispose();
var r5 = db.GetString(&select
name from student limit 0,1&);
var r6 = db.ExecuteCommand(&select 1&);}

我要回帖

更多关于 魅族游戏框架不支持 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信