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数据库都是一个数据库写一个类,类 ...
随机推荐
- 今日例子border
border这个属性在页面上的使用率还是很高,例如我们需要理解的盒模型就需要对border有个 比较深的理解,如果你会盒模型,但对border没有深的理解,那只能说你只是知道盒模型,而 不是懂得盒模型 ...
- 18数据表&E-R模型&概念数据模型-下(选学)-天轰穿大话数据库视频教程
关键字:数据表 三大范式 外键 主键 数据表设计 天轰穿 sqlserver 数据库大纲:属性与主键,外键&联系,三大范式,设计表时应该考虑的因素 土豆超清地址: 优酷超清地址: 原文地址:h ...
- iOS开发拓展篇——如何把项目托管到GitHub
iOS开发拓展篇——如何把项目托管到GitHub 说明:本文主要介绍如何把一个OC项目托管到Github,重操作轻理论. 第一步:先注册一个Github的账号,这是必须的 注册地址:Github官网注 ...
- 关于PF_RING/Intel 82599/透明VPN的一些事
接近崩溃的边缘,今天这篇文章构思地点在医院,小小又生病了,宁可吊瓶不吃药,带了笔记本却无法上网,我什么都不能干,想了解一些东西,只能用3G,不敢 开热点,因为没人给我报销流量,本周末我只有一天时间,因 ...
- C++多线程开发之actor model
最近想把写过的一个多线程程序整理一下,这个程序主要特点是有一系列的互相之间有依赖关系的task.于是在网上找相关类库 1,一类是简单的线程池了,这也是原本俺的做法.之前使用的是手工调度,代码实现的很蛋 ...
- ubuntu 16.04 tmux
旧的鼠标选项 setw -g mode-mouse on set-option -g mouse-resize-pane on set-option -g mouse-select-pane on s ...
- [算法导论]BFS @ Python
class Graph: def __init__(self): self.V = [] class Vertex: def __init__(self, x): self.key = x self. ...
- 机器学习技法--学习笔记03--Kernel技巧
背景 上一讲从对偶问题的角度描述了SVM问题,但是始终需要计算原始数据feature转换后的数据.这一讲,通过一个kernel(核函数)技巧,可以省去feature转换计算,但是仍然可以利用featu ...
- Nginx负载均衡 后端服务器怎么共享Session 问题
Nginx负载均衡 Nginx负载均衡一些基础知识: nginx 的 upstream目前支持 4 种方式的分配 1).轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端 ...
- python数据结构之二叉树的实现
树的定义 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样.树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形 ...