Entity Framework增删改之通用精简方法
用EF用了好长一段时间了,从EF4.0的版本开始接触,感觉这个ORM不能说性能是最好的,但是我个人感觉功能实现以及和mvc的结合还是一个不错的企业级网站的解决方案,在此写个简易的通用扩展方法来方便大家使用以及增删改的时候方便调用,由于在此只做简单演示和介绍,可能程序不会那么健壮,希望大家自己完善下或者给我消息一同解决。
一般code first的自己定义的实体类都会有相同的字段属性名字,就从这入手,定义一个接口进行共同的属性定义,通过实体类继承接口来实现扩展方法的实现,首先定义一下接口,如下
public interface INETData
{
/// <summary>
/// 数据ID主键
/// </summary>
int ID { get; set; }
/// <summary>
/// 更新时间
/// </summary>
DateTime? UpdateTime { get; set; }
/// <summary>
/// 创建时间
/// </summary>
DateTime? CreateTime { get; set; }
/// <summary>
/// 状态
/// </summary>
int? State { get; set; }
}
在做一个实体类来做演示,实体类继承实现上面接口,如下:
public class Article:INETData
{
public int ID { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int? State { get; set; }
public DateTime? UpdateTime { get; set; }
public DateTime? CreateTime { get; set; } }
用接口就是方便扩展,可能我定义的接口字段有点多,你可以根据自己的数据库设计来自己定义,接下来就写下数据的扩展方法,如下:
public static class DataExtension
{
private static GeneralNETEntities queryEntities = null; private static GeneralNETEntities db
{
get
{
if (queryEntities == null)
{
queryEntities = new GeneralNETEntities();
}
return queryEntities;
}
} /// <summary>
/// 添加或修改
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static bool SaveOrUpdate(this IData data)
{
bool success = false;
if (data != null)
{
if (data.Id < )
{
if (!data.State.HasValue)
{
data.State = ;
}
data.CreateTime = DateTime.Now;
data.UpdateTime = DateTime.Now;
db.Set(data.GetType()).Add(data);
}
else
{
data.UpdateTime = DateTime.Now;
UpdateData(data);
} try
{
db.SaveChanges();
success = true;
}
catch
{
success = false;
}
}
return success;
} /// <summary>
/// 删除操作
/// </summary>
/// <param name="data"></param>
/// <param name="isLogicDelete"></param>
/// <returns></returns>
private static bool Delete(this IData data, bool isLogicDelete)
{
bool success = false;
try
{
if (isLogicDelete)
{
data.State = -; // state = -1 时,逻辑删除
UpdateData(data);
}
else
{
db.Set(data.GetType()).Attach(data);
db.Set(data.GetType()).Remove(data);
}
db.SaveChanges();
success = true;
}
catch (Exception)
{
success = false;
}
return success;
} /// <summary>
/// 逻辑删除state = -1
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static bool Delete(this IData data)
{
return Delete(data, true);
} /// <summary>
/// 彻底删除
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static bool Remove(this IData data)
{
return Delete(data, false);
} /// <summary>
/// 更新操作
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
private static bool UpdateData(this IData data)
{
bool success = false;
try
{
if (data != null)
{
db.Entry(data).State = System.Data.EntityState.Modified;
success = true;
}
}
catch (Exception)
{
success = false;
}
return success;
}
}
有了这个扩展方法就ok了,以上代码加上实现EF的DbContext的那个类就可以做项目的数据层了,接下来看使用方法,在此我们在做一个中间层来做业务逻辑处理,简单修改和保存调用方法 ,如下:
public bool SaveOrUpdate(Article model)
{
return model.SaveOrUpdate();
}
删除的方法一样,接下来在mvc的控制器里就可以调用业务逻辑层的方法了,首先new一个业务层的对象类,然后比方说你的控制器接到了view视图传过来的数据实体,然后就可以直接调用业务层的方法把参数传就去就ok了,
这样做的优点是方便调用,把保存和修改整合到一块了,另外数据实体类比方说更新时间和创建时间的记录啊都可以通过接口来耦合,而不用在单独添加数据了,只要实现了那个接口就可以实现增删改的扩展方法。
以上就是我做的简单整合,希望大家多提意见,可能有点写的有点啰嗦,主要是我希望方便基础不好的同学能方便看懂,因为我也是从一个小白走过来的,可以想到当初我入门时自己的辛苦,我希望那些对技术比较感兴趣的新手可以走的快一点。
Entity Framework增删改之通用精简方法的更多相关文章
- 3、ASP.NET MVC入门到精通——Entity Framework增删改查
这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"( ...
- 2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改
由于我是自学的,没有人教,在网上查资料也查不到个所以然.问大神们也是爱理不理的. 所以这篇随笔纯粹源自于我自己的认识.是否真正正确我也没有把握. 如果有什么错误,请大神们给予指正 ========== ...
- Entity FrameWork 增删改查
Entity Framework (又称ADO.NET Entity Framework) 是微软以 ADO.NET 为基础所发展出来的对象关系对应(O/R Mapping) 解决方案 ...
- 浅谈Entity Framework 增删改查和事务操作
1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否 ...
- Entity Framework 增删改查和事务操作
1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否 ...
- 【C#】Entity Framework 增删改查和事务操作
1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否 ...
- 基于Entity Framework的自定义分页,增删改的通用实现
简介 之前写个一个基于Dapper的分页实现,现在再来写一个基于Entity Framework的分页实现,以及增删改的通用实现. 代码 还是先上代码:https://github.com/jinwe ...
- 用DBContext (EF) 实现通用增删改查的REST方法
我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式 ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
随机推荐
- Java band [Cite]
SampleModel 取样模型Databuffer 数据缓冲区 Raster 光栅Sample 样本band 带 SampleModel是java awt中的一个抽象类,它定义了一个接口,用于提 ...
- SQL问题集锦
1.union和union all的区别:http://www.cnblogs.com/xiangshu/articles/2054447.html
- 关于TCP的粘包
2014年与宗宗一起去厦门测试软件接口的时候,与上级系统基于TCP方式通讯,数据量大时,经常通讯失败,检查日志发现是上级系统应该多次返回的数据一次性接收到了. 上网搜索了一下,才了解到TCP粘包的问题 ...
- ios之VFL的补充(三)
@"|-50-[buttonA(80@100)]-[buttonB(90@200)]-50-|" 这条语句的含义是:“左右边距都为50,中间有两个按钮,相隔缺省宽度,一个控件宽度为 ...
- 给同为.NET开发者普及一点Oracle数据库经验
前段时间,因为要给自己开发的搜易站内搜索引擎增加Oracle数据库的支持,所以学习了下Oracle的基础知识,发现使用方式跟MYSQL,MSSQL等数据库的思维有很大的不同,总结一下几点不同,希望给初 ...
- NXP LPC 状态可配置的定时器(SCT)
状态可配置的定时器(SCT) 前言正在申请专利的状态可配置的定时器(SCT),是一个复杂的,但易于配置的定时器,它提供前所未有的灵活性,使工程师们在未来证明他们的设计,并减少进入市场的时间.在其最简单 ...
- mysql 查看正在运行的进程
show processlist ; 显示正在运行的进程,使用Kill命令删除 kill 5260;
- 如何增强 Linux 系统的安全性,第一部分: Linux 安全模块(LSM)简介
http://www.ibm.com/developerworks/cn/linux/l-lsm/part1/ 1.相关背景介绍:为什么和是什么 近年来Linux系统由于其出色的性能和稳定性,开放源代 ...
- JAVA生产者消费者的实现
春节回了趟老家,又体验了一次流水席,由于桌席多,导致上菜慢,于是在等待间,总结了一下出菜流程的几个特点: 1.有多个灶台,多个灶台都在同时做菜出来. 2.做出来的菜,会有专人用一个托盘端出来,每次端出 ...
- Scala 深入浅出实战经典 第65讲:Scala中隐式转换内幕揭秘、最佳实践及其在Spark中的应用源码解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...