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数据库都是一个数据库写一个类,类 ...
随机推荐
- JavaScript 语句 for
循环for语句: for(var i =1;i<=5;i++)(初始条件:循环条件:状态改变) { 循环体 } 循环的作用:反复执行某段代码 四要素:初始条件.循环条件.循环体.状态改变 例题1 ...
- hive函数 -- split 字符串分割函数
hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...
- 微博mini for Windows Phone
下载地址: http://vdisk.weibo.com/s/KrzW5
- Meanshift filter实现简单图片的卡通化效果
利用Meanshift filter和canny边缘检测的效果,可以实现简单的图片的卡通化效果.简单的说,就是用Meanshift filter的结果减去canny算法的结果得到卡通化的效果. ...
- Revit2013工具栏工具无法显示BUG
该BUG在Revit2013版中存在,主要症状就是当你激活某些工具的时候,上部工具栏中本应该显示的上下文工具显示不出来,比如当你选中模型中的风管的时候,正常情况下工具栏应该是这个样子. 但是在Revi ...
- zz 游戏程序员的学习之路(中文版)
游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. ...
- 配置CENTOS YUM更新源
众所周知,Centos 有个很方便的软件安装工具 yum,但是默认安装完centos,系统里使用的是国外的centos更新源,这就造成了我们使用默认更新源安装或者更新软件时速度很慢的问题. 为了使用 ...
- Git – fatal: Unable to create ‘/.git/index.lock’: File exists错误解决办法
有时候在提交的时候,中间提交出错,导致有文件被lock,所以会报下面的错误: fatal: Unable to create ‘/msg/.git/index.lock’: File exists. ...
- mysql触发器_begin end 执行多次语句
//多SQL中导出的触发器语句: DROP TRIGGER IF EXISTS `t_trig`; DELIMITER // CREATE TRIGGER `t_trig` BEFORE INSERT ...
- 一个非常棒的html5框架-ionic
http://ionicframework.com/ 之前用过app.js,相比ionic,真是弱爆了! http://learn.ionicframework.com/formulas/ 上面的链接 ...