EF 一个简单的使用
原文:https://www.cnblogs.com/leotsai/p/entity-framework-doesnt-need-additional-repository.html
花猫.NET的评论里面的代码
记录一下
1、创建的控制台程序,NuGet引用了EF。 里面用了序列号,需要引用Newtonsoft.Json
2、数据库用的现成的,已经有表和数据了。数据库名MyDbContext,表Students
3、在app.config中添加配置项,添加到configSections这个节点后面,和它同级。
<connectionStrings>
<add name="MyDbContext" connectionString="Data Source=.\sqlexpress;Database=MyDbContext;UID=sa;PWD=sa;" providerName="System.Data.SqlClient"></add>
</connectionStrings>
全部代码
基本使用
//基本使用
public class Class4
{
public void test1()
{
Console.WriteLine();
using (var db = DbFactory.Create())
{
//db....
//db.SaveChange(); //测试1 打印students表的所有数据
var list = db.All<Students>().ToList();
var str = JsonConvert.SerializeObject(list);
Console.WriteLine(str); //测试2 添加一个学生
Students student1 = new Students
{
Name = "name12",
Age = ,
};
db.Insert<Students>(student1);
db.SaveChanges();
}
}
}
自定义代码
//自定义代码
public class Students
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public DateTime? CreateTime { get; set; }
} public class MyDbContext : DbContext
{
public MyDbContext(string connectionName) : base(connectionName) { }
public DbSet<Students> Orders { get; set; }
}
通用代码 引用了 MyDbContext
//原文:https://www.cnblogs.com/leotsai/p/entity-framework-doesnt-need-additional-repository.html
//花猫.NET的评论里面的代码 //通用代码 引用了 MyDbContext
public class DbFactory
{
public static IRepository Create()
{
return new EfRepository(new MyDbContext("MyDbContext"));
}
} public interface IRepository : IDisposable
{
int SaveChanges();
IQueryable<T> All<T>() where T : class;
T Get<T>(Expression<Func<T, bool>> conditions) where T : class;
void Insert<T>(T entity) where T : class;
void Update<T>(T entity) where T : class;
void Delete<T>(T entity) where T : class;
void Delete<T>(Expression<Func<T, bool>> conditions) where T : class;
List<T> Find<T>(Expression<Func<T, bool>> conditions = null) where T : class;
List<T> Find<T, S>(Expression<Func<T, bool>> conditions, Expression<Func<T, S>> orderBy, int pageSize, int pageIndex, out int totalCount) where T : class;
List<T> SqlQuery<T>(string sql);
int ExecuteSqlCommand(string sql);
long GetNextSequenceValue(string sequenceName);
} public class EfRepository : IRepository
{
private DbContext context; public EfRepository(DbContext dbcontext)
{
context = dbcontext;
} #region IRepository public IQueryable<T> All<T>() where T : class
{
return context.Set<T>().AsNoTracking();
} public void Update<T>(T entity) where T : class
{
var entry = context.Entry(entity);
if (entry.State == EntityState.Detached)
{
context.Set<T>().Attach(entity);
}
entry.State = EntityState.Modified;
} public void Insert<T>(T entity) where T : class
{
context.Set<T>().Add(entity);
} public void Delete<T>(T entity) where T : class
{
var entry = context.Entry(entity);
if (entry.State == EntityState.Detached)
{
context.Set<T>().Attach(entity);
}
entry.State = EntityState.Deleted;
context.Set<T>().Remove(entity);
} public void Delete<T>(Expression<Func<T, bool>> conditions) where T : class
{
var list = Find<T>(conditions);
foreach (var item in list)
{
Delete<T>(item);
} } public T Get<T>(Expression<Func<T, bool>> conditions) where T : class
{
return All<T>().FirstOrDefault(conditions);
} public List<T> Find<T>(Expression<Func<T, bool>> conditions = null) where T : class
{
if (conditions != null)
{
return All<T>().Where(conditions).ToList();
}
else
{
return All<T>().ToList();
} } public List<T> Find<T, S>(Expression<Func<T, bool>> conditions, Expression<Func<T, S>> orderBy, int pageSize, int pageIndex, out int totalCount) where T : class
{
var queryList = conditions == null ?
All<T>() :
All<T>().Where(conditions); totalCount = queryList.Count(); return queryList.OrderByDescending(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
} public List<T> SqlQuery<T>(string sql)
{
return context.Database.SqlQuery<T>(sql).ToList();
} public int ExecuteSqlCommand(string sql)
{
return context.Database.ExecuteSqlCommand(sql);
} public int SaveChanges()
{
return context.SaveChanges();
} public void Dispose()
{
context.Dispose();
} public long GetNextSequenceValue(string sequenceName)
{
var rawQuery = context.Database.SqlQuery<long>(string.Format("SELECT NEXT VALUE FOR {0}", sequenceName)).ToList();
long nextVal = rawQuery.Single(); return nextVal;
} #endregion
}
EF 一个简单的使用的更多相关文章
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- 用EF DataBase First做一个简单的MVC3报名页面
使用EF DataBase First做一个简单的MVC3报名网站 ORM(Object Relational Mapping)是面向对象语言中的一种数据访问技术,在ASP.NET中,可以通过ADO. ...
- 自己实现的一个简单的EF框架(反射实现)
我实现了一个简单的EF框架,主要用于操纵数据库.实现了对数据库的基本操纵--CRUD 这是项目结构 这是一个 core 下的 DLL 写了一个数据库工厂,用于执行sql语句.调用sql语句工厂 写了一 ...
- 一个简单的Webservice的demo,简单模拟服务
前段时间一直在学习WCF,匆匆忙忙的把<WCF全面解析>和<WCF服务编程>看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了.回顾了一 ...
- ADF_General JSF系列1_创建一个简单的JSF Application
2015-02-17 Creatd By BaoXinjian
- 一个简单的ORM制作(SQL帮助类)
一个简单的ORM制作大概需要以下几个类: SQL执行类 CURD操作类 其他酱油类 先从SQL执行类说起,可能会涉及数据库的迁移等问题,所以需要定义一个接口以方便迁移到其他数据库, 事务没提供命名,若 ...
- [.NET] 一步步打造一个简单的 MVC 网站 - BooksStore(一)
一步步打造一个简单的 MVC 网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 简介 主 ...
- asp.net core 实现一个简单的仓储
一直有自己写个框架的想法,但是一直没有行动起来,最近比较闲,正好可以开工了. 现在已经完成了两部分.1.一个简单仓储,实现使用的是ef 2.IOC部分,这里是把内置的ioc替换成了aotofac,这部 ...
- TensorFlow练习13: 制作一个简单的聊天机器人
现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...
随机推荐
- winmount导致资源管理器崩溃
今天,在别人电脑上遇到一个问题,右键点击某个特定文件夹会导致资源管理器崩溃重启,提示为: Runtime Error! Program: C:\Windows\Explorer.exe This ap ...
- Windows 上安装 MySQL(8.0.11)
1.接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息: [m ...
- 微软 workflow 工作流总结2
1.公共的状态机工作流 书签的设置 可以在判断模块中的action中赋值,因为在action中肯定要进入到下一个书签,所以可以在此给书签name赋值
- mysql-xtrabackup备份sh: xtrabackup_56: command not found与error while loading shared libraries: libssl.so.6: cannot open shared object file: No such file or directory
sh: xtrabackup_56: command not foundinnobackupex: fatal error: no 'mysqld' group in MySQL options解决办 ...
- [IIS]win7下怎么安装IIS
- [STM32F103]PWM输入捕获配置
l 初始化定时器和通道对应IO的时钟. l 初始化IO口,模式为输入: GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 ...
- group by 拓展
Oracle的group by除了基本使用方法以外,还有3种扩展使用方法,各自是rollup.cube.grouping sets.分别介绍例如以下: 1.rollup 对数据库表emp.如果当中两个 ...
- 升级openssl 操作记录
openssl 是一群黑客最爱研究搞怪的一个软件为啥,据说openssl是一群数学家编写的一套算法 哈哈 好,说正事 openssl 经常发布补丁包,因为升级是避免不了的 步骤: 查看当前openss ...
- oracle锁表+解锁
一.锁表: LOCK TABLE tablename IN EXCLUSIVE MODE; 二.解锁 * 1.首先用dba账户登录数据库 * * 2.查出被锁定的对象 * select * from ...
- centos7下安装Go环境
下载go cd /home mkdir app cd app wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz ta ...