用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增删改之通用精简方法的更多相关文章

  1. 3、ASP.NET MVC入门到精通——Entity Framework增删改查

    这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"( ...

  2. 2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改

    由于我是自学的,没有人教,在网上查资料也查不到个所以然.问大神们也是爱理不理的. 所以这篇随笔纯粹源自于我自己的认识.是否真正正确我也没有把握. 如果有什么错误,请大神们给予指正 ========== ...

  3. Entity FrameWork 增删改查

         Entity Framework (又称ADO.NET Entity Framework) 是微软以 ADO.NET 为基础所发展出来的对象关系对应(O/R Mapping) 解决方案   ...

  4. 浅谈Entity Framework 增删改查和事务操作

    1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否 ...

  5. Entity Framework 增删改查和事务操作

    1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否 ...

  6. 【C#】Entity Framework 增删改查和事务操作

    1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否 ...

  7. 基于Entity Framework的自定义分页,增删改的通用实现

    简介 之前写个一个基于Dapper的分页实现,现在再来写一个基于Entity Framework的分页实现,以及增删改的通用实现. 代码 还是先上代码:https://github.com/jinwe ...

  8. 用DBContext (EF) 实现通用增删改查的REST方法

    我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式 ...

  9. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

随机推荐

  1. 详解Bootstrap面板组件

    面板组件主要作用是用来处理一些其他组件无法完成的功能,在不同的版本中具有不同的源码: LESS:panels.less SASS:_panels.scss 基础面板非常简单,就是一个div容器中运用了 ...

  2. dom4j 读取xml

    package core.util; import java.io.File; import java.util.Iterator; import java.util.List; import org ...

  3. (谷歌浏览器等)解决css中点击input输入框时出现外边框方法【outline:medium;】

    问题:在使用谷歌浏览器,360浏览器时,点击input输入框会出现带颜色的外边框,如下图所示:

  4. 【VerySky原创】RPR_ABAP_SOURCE_SCAN

    [VerySky原创]RPR_ABAP_SOURCE_SCAN 扫描 ABAP 报表源

  5. Selenium3笔记-WebDriver源码初探

    Selenium3 有哪些变化? 其实相对于与Selenium2,Selenium3没有做太多的改动.下面给出官方的文档说明,供参考. 参考文档:https://seleniumhq.wordpres ...

  6. 利用EEPROM实现arduino的断电存储

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 一.EEPROM简介 EEPROM (Electrically Erasable Progr ...

  7. mac os x用macport安装redis

    一.Redis简要介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的 ...

  8. SQL 游标使用实例

    IF EXISTS(SELECT *FROM sysobjects WHERE name='sp_ContestSubmit') DROP PROC sp_ContestSubmit GO -- == ...

  9. Android开发(三十二)——延时

    模拟延时 private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected S ...

  10. 打包时Xcode报:此证书的签发者无效Missing iOS Distribution signing identity

    问题描述 今天准备打包上传AppStore,结果Xcode报以下错误:Missing iOS Distribution signing identity for XXXXXX 查看证书后发现,Deve ...