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数据库都是一个数据库写一个类,类 ...
随机推荐
- AStar算法(转载)
以下的文章来至http://blog.csdn.net/debugconsole/article/details/8165530,感激这位博主的翻译,可惜图片被和谐了,所以为方便阅读,我重新把图片贴上 ...
- 编写高质量代码改善C#程序的157个建议——导航开篇
前言 由于最近工作重心的转移,原来和几个同事一起开发的项目也已经上线了,而新项目就是在现有的项目基础上进行优化延伸扩展.打个比方,现在已经上线的项目行政案件的Web管理网站(代码还没那么多相比较即将要 ...
- Solr调研总结
http://wiki.apache.org/solr/ Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境 ...
- latextools \cite 自动补全
最近在用latex写毕业论文,编辑环境用的是Sublime Text 2 加 latextools 插件,在使用latextools的\cite命令来引用参考文献时,我们希望输入\cite{ 后自动弹 ...
- 流媒体选择Nginx是福还是祸?
CDN,视频云,已经“僧多粥少” 视频直播的持续升温,无意间也让带宽生意的争夺变得异常残酷.一时间,各种云计算.CDN.视频云提供商都在视频尤其是直播上投入重兵,揭竿而起的新生起义军们也正马不停蹄的赶 ...
- Android防止按钮连续点击
为了防止用户或者测试MM疯狂的点击某个button,写个方法防止按钮连续点击. public class Utils { private static long lastClickTime; publ ...
- 英語版Windows Server 2012 R2を日本語化する手順
[スタート]ボタンを押し.[Control Panel]を起動 [Clock, Language and Region]の下の[Add a Language]をクリック [Add a Language ...
- 《objective-c基础教程》学习笔记(十)—— 内存管理
本篇博文,将给大家介绍下再Objective-C中如何使用内存管理.一个程序运行的时候,如果不及时的释放没有用的空间内存.那么,程序会越来越臃肿,内存占用量会不断升高.我们在使用的时候,就会感觉很卡, ...
- Hadoop - 实时查询Drill
1.概述 在现实业务当中,存在这样的业务场景,需要实时去查询HDFS上的相关存储数据,普通的查询(如:Hive查询),时延较高.那么,是否存在时延较小的查询组件.在业界目前较为成熟的有Cloudera ...
- friend class
友元函数与友元类. C++中以关键字friend声明友元关系.友元可以访问与其有friend关系的类中的私有成员.友元包括友元函数和友元类. 编辑本段1.友元函数 如果在本类以外的其它地方定义 ...