CRM框架小知识以及增删查改逻辑代码

CRM:客户关系管理系统

总体框架 MVC4 + EF5 + Autofac 替代工厂层连接各个层之间的关系

基本框架

01实体层 02仓储层 03业务层 04公共层 05UI 用MVC框架
------------------------------------------
01实体层 EF

01实体层 中 为了方便模型注解

用T4模板分别生成 EF实体类的部分类 和 贴标签的类

EF实体类的部分类

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using crm.model.ModelView;
[MetadataType(typeof(sysFunctionView))]
public partial class sysFunction
{

}

贴标签的类

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
public partial class sysMenusView
{
public int mID { get; set; }
public int mParentID { get; set; }
[DisplayName("菜单名称"), Required(ErrorMessage = "菜单名称非空")]
public string mName { get; set; }
[DisplayName("地址url"), Required(ErrorMessage = "地址url非空")]
public string mUrl { get; set; }
[DisplayName("区域"), Required(ErrorMessage = "区域非空")]
public string mArea { get; set; }
[DisplayName("控制器"), Required(ErrorMessage = "控制器非空")]
public string mController { get; set; }
[DisplayName("方法"), Required(ErrorMessage = "方法非空")]
public string mAction { get; set; }
[DisplayName("排序编号"), Required(ErrorMessage = "排序编号非空")]
public int mSortid { get; set; }
[DisplayName("状态")]
public int mStatus { get; set; }
[DisplayName("菜单图标"), Required(ErrorMessage = "菜单图标非空")]
public string mPicname { get; set; }
public int mLevel { get; set; }
public string mExp1 { get; set; }
public Nullable<int> mExp2 { get; set; }
public int mCreatorID { get; set; }
public System.DateTime mCreateTime { get; set; }
public Nullable<int> mUpdateID { get; set; }
public System.DateTime mUpdateTime { get; set; }
}

注意点: 引用T4 模板的时候 首先 修改 此处

const string inputFile = @"..\crm.model\JKCRM.edmx";

对于T4模板的使用 更好的理解 里面生成空间命名,类名,字段,属性,

知道怎么去修改T4 模板按照自己的需要 生成类

-----------------------------

02仓储层 两个类库 DAL 与 接口 IDAL

DAL类库中:

泛型 BaseDAL<TEntity> 类 和 BaseDbContext 类

还有一系列通过T4模板生成的‘TEntity‘DAL 类 这些类

继承BaseDAL<TEntity> 并实现接口 I‘TEntity‘DAL

public partial class ‘TEntity‘DAL:BaseDAL<TEntity>,I‘TEntity‘DAL

BaseDbContext 类 继承 DbContext 自定义EF容器

using System.Data.Entity;

public class BaseDbContext:DbContext
{
public BaseDbContext()
: base("name=JKCRMEntities")
{

}
}

首先有 泛型 BaseDAL要实现接口IDAL --》

public class BaseDAL<TEntity>:IBaseDAL<TEntity> where TEntity :class

BaseDAL 中编写 增,删,改,查 逻辑代码

定义一个DbSet<T> 私有变量在构造函数中初始化

DbSet<TEntity> _dbset;

public BaseDAL()
{
_dbset = db.Set<TEntity>();
}

--------增,删,改,查 逻辑代码

#region 3.0 查询相关方法

#region 3.0.1 带条件查询方法
/// <summary>
/// 带条件查询方法
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IQueryable<TEntity> QueryWhere(Expression<Func<TEntity, bool>> where)
{
return _dbset.Where(where);
}
#endregion

#region 3.0.2 连表查询

public IQueryable<TEntity> QueryJoin(Expression<Func<TEntity, bool>> where, string[] tableNames)
{
//1.0 参数合法性检查
if (tableNames == null || tableNames.Any() == false)
{
throw new Exception("连表方法至少要有一个表名称");
}

//2.0 定义DbQuery<Tentity>
DbQuery<TEntity> query = _dbset;

//3.0 遍历
foreach (var item in tableNames)
{
query = query.Include(item);
}

//4.0 带上条件查询
return query.Where(where);
}

#endregion

#region 3.0.3 分页查询

public IQueryable<TEntity> QueryByPage<TKey>(int pageindex
, int pagesize
, out int totalcount
, Expression<Func<TEntity, bool>> where
, Expression<Func<TEntity, TKey>> order)
{
//1.0 计算出跳过的总行数
int skipCount = (pageindex - 1) * pagesize;

//2.0 计算出总行数
totalcount = _dbset.Count(where);

//3.0 返回
return _dbset.Where(where).OrderByDescending(order).Skip(skipCount).Take(pagesize);
}

#endregion

#region 3.0.4 统一的执行sql语句的方法

/// <summary>
/// 利用EF直接执行sql语句或者存储过程
/// 注意如果执行的是存储过程,则不需要exec 只需要传入 存储过程的名称 参数1,参数2......
/// 格式: Usp_GetList 1,2
/// </summary>
/// <typeparam name="TElement"></typeparam>
/// <param name="sql"></param>
/// <param name="ps"></param>
/// <returns></returns>
public List<TElement> RunSql<TElement>(string sql, params object[] ps)
{
return db.Database.SqlQuery<TElement>(sql, ps).ToList();
}

#endregion

#endregion

#region 4.0 新增

public void Add(TEntity model)
{
//1.0 参数合法性验证
if (model == null)
{
throw new Exception("实体非空");
}

//2.0 追加到EF容器中并且将状态修改成added
_dbset.Add(model);
}

#endregion

#region 5.0 按需编辑(new 具体的实体,手工修改其状态为unchanged再修改属性的ismodified为true)

public void Edit(TEntity model, string[] properts)
{
//1.0 参数合法性验证
if (model == null)
{
throw new Exception("实体非空");
}
if (properts == null || properts.Any() == false)
{
throw new Exception("要修改的属性至少要有一个");
}

//2.0 将model追加到EF容器中
var entry = db.Entry(model);
entry.State = System.Data.EntityState.Unchanged;

//3.0 遍历
foreach (var item in properts)
{
entry.Property(item).IsModified = true;
}

//4.0 关闭EF实体属性合法性验证
db.Configuration.ValidateOnSaveEnabled = false;
}

#endregion

#region 6.0 物理删除

public void Delete(TEntity model, bool isAddedContext)
{
//1.0 参数合法性验证
if (model == null)
{
throw new Exception("实体非空");
}

//2.0 如果未追加则追加
if (isAddedContext == false)
{
_dbset.Attach(model);
}

//3.0 将状态修改为deleted
_dbset.Remove(model);
}

#endregion

#region 7.0 统一保存
public int SaveChanges()
{
return db.SaveChanges();
}
#endregion

------

IDAL类库中:接口IBaseDAL 和通过T4模板生成的一些了接口 I‘Tentity‘DAL

这一系列接口 继承 接口IBaseDAL

public partial interface I‘Tentity‘DAL:IBaseDAL<Tentity>
---------------------------------------------------------------
整体DAL 成 之间关系

1,通过T4模板生成的 ‘TEntity‘DAL 继承泛型类BaseDAL<TEntity>

并实现通过T4模板生成的 I‘TEntity‘DAL 接口

2,通过T4模板生成的 I‘TEntity‘DAL 接口 继承IBaseDAL<TEntity> 接口

3,BaseDAL<TEntity> 实现 IBaseDAL<TEntity> 接口

‘TEntity‘DAL:BaseDAL<TEntity>,I‘TEntity‘DAL

I‘Tentity‘DAL:IBaseDAL<Tentity>

BaseDAL<TEntity>:IBaseDAL<TEntity> where TEntity :class
--------------------------------------------------------------

03业务层

两个类库 BLL 和 IBLL

类库BLL 中 包含 BaseBLL<TEntity> 泛型类 和通过T4模板生成的一些类‘TEntity‘BLL

关系:1, BaseBLL<TEntity> 泛型类 继承接口IBaseBLL<TEntity>

public class BaseBLL<TEntity> : IBaseBLL<TEntity> where TEntity : class

2, 通过T4模板生成的一些类 继承 BaseBLL<TEntity> 泛型类

并且实现通过T4模板生成的一些接口 I‘TEntity‘BLL

public partial class ‘TEntity‘BLL:BaseBLL<TEntity>,I‘TEntity‘BLL

在 BaseBLL<TEntity> 中 :

public class BaseBLL<TEntity> : IBaseBLL<TEntity> where TEntity : class
{
protected IBaseDAL<TEntity> basedal;
#region 3.0 查询相关方法

#region 3.0.1 带条件查询方法
/// <summary>
/// 带条件查询方法
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IQueryable<TEntity> QueryWhere(Expression<Func<TEntity, bool>> where)
{
return basedal.QueryWhere(where);
}
#endregion

等 .....

在通过T4模板生成的一些类‘TEntity‘BLL 构造函数中 直接T4模板生成

public partial class sysKeyValueBLL:BaseBLL<sysKeyValue>,IsysKeyValueBLL
{
IsysKeyValueDAL dal;
public sysKeyValueBLL(IsysKeyValueDAL dal)
{
this.dal = dal;
base.basedal = dal;
}

在IBLL 类库中

包含 接口IBaseBLL 和通过T4模板生成的一些了接口 I‘TEntity‘BLL

public partial interface IsysKeyValueBLL:IBaseBLL<sysKeyValue>

时间: 2024-10-07 06:10:26

CRM框架小知识以及增删查改逻辑代码的相关文章

mysql基础知识之增删查改使用介绍

 mysql基础知识之增删查改使用介绍 本文主要介绍mysql常用的SELECT.INSERT.UPDATE.DELETE语句的使用,数据库的安装这里不做介绍,并且事先已经准备好相关数据. 本文中使用的student表中的数据如下: mysql> SELECT * FROM student; 一.SELECT语句的使用 1.单表查询 语法格式: SELECT culom1,culom2,culom3 FROM TABLE_NAME; 可以改变字段显示顺序 2.WHERE子句查询 语法格式: SE

EF实现增删查改功能

In the previous tutorial you created an MVC application that stores and displays data using the Entity Framework and SQL Server LocalDB. In this tutorial you'll review and customize the CRUD (create, read, update, delete) code that the MVC scaffoldin

mvc模式下dao中的增删查改

1.新建Dao包 并创建实体的dao类 2.以DBHelper为基础具体实现增删查改 具体代码如下: public static int insert(User u) { String sql = "insert into user(userID,userName) values(?,?)"; Object[] params = new Object[] { u.getUserID(), u.getUserName() }; return DBHelper.ExecSql(sql, p

SpringMVC+hibernate整合小例子,用户的增删查改

SpringMVC+hibernate整合小例子,用户的增删查改 对于使用框架写项目,我的第一反应的把所有需要的jar文件引入. 因为我用的是JDK1.8,当使用spring3.2 注解的时候会出现问题,所以最终使用的spring4.0.  hibernate使用的版本为4.0 .至于一些依赖包的版本就是看别人的资料拿的. 然后看下整体的项目结构 第一步写的是web.xml配置文件,当然有写东西是后面加上去的,不是一步到位的,比如说控制post方式的乱码.以及无法时候JS文件等一些静态文件,后面

SSH框架的多表查询和增删查改 (方法一)上

原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>  http://www.cnblogs.com/zhu520/p/7772823.html   因为最近在做Android 练习的项目,使用增删查改的时候还是使用jdbc的增删查改 发现实在是太麻烦了,所有果断抛弃它,使用ssh, 但是发现不会....经过了四天的时间我终于弄懂了. 哪个大神看到有问题指点一下. 在弄这前要先明白一下@Component @Controller @Service @Repository 这些注释 可以

6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pattern-and-dep/ 系列目录: Relationship in Entity Framework Using Code First Approach With Fluent API[[使用EF Code-First方式和Fluent API来探讨EF中的关系]] Code First Mig

4.CRUD Operations Using the Repository Pattern in MVC【在MVC中使用仓储模式进行增删查改】

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 上一篇文章,讲到了MVC中基本的增删查改,这篇文章,我会继续说到,使用仓储模式,进行增删查改. 什么是仓储模式呢,我们先来了解一下:  仓储模式是为了在程序的数据访问层和业务逻辑层之间创建一个抽象层,它是一种数据访问模式,提供了一种更松散耦合的数据访问方法.我们把创建数据访问的逻辑代码写在单独的类中,或者类库中

mybatis实现简单的增删查改

接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的.这样学习起来,方向性也会更强一些.我对于mybatis的理解是,它是一个封装了JDBC的java框架.所能实现的功能是对数据库进行增删查改的功能. 首先,需要搭建一个demo,用于学习这个框架的使用方式.(1)在IDE上建立自己的工程目录,一个普通的java工程项目就好,我电脑本地的IDE是Myeclipse.(2)引入搭建框架需要的jar包,这个直接去网上搜索就好.(3)框架的核心实现都是基于配置的,引入jar包后,先配置my

一套手写ajax加一般处理程序的增删查改

倾述下感受:8天16次驳回.这个惨不忍睹. 好了不说了,说多了都是泪. 直接上代码 : 这个里面的字段我是用动软生成的,感觉自己手写哪些字段太浪费时间了,说多了都是泪 ajax.model层的代码: using System; namespace Ajax.Model { /// <summary> /// SM_Class:实体类(属性说明自动提取数据库字段的描述信息) /// </summary> [Serializable] public partial class SM_C