仓储模式和传统三层架构多数据库实现
仓储模式:通用方法
public class DepartmentRepository : RepositoryBase<DepartmentEntity>, IRepositoryBase<DepartmentEntity>
{}
/// <summary>
/// 仓储接口
/// </summary>
/// <typeparam name="TEntity">实体类型</typeparam>
public interface IRepositoryBase<TEntity> where TEntity : class,new()
{int Insert(TEntity entity);
}
/// <summary>
/// 仓储实现
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class RepositoryBase<TEntity> : IRepositoryBase<TEntity> where TEntity : class,new()
{public NFineDbContext dbcontext = new NFineDbContext();public int Insert(TEntity entity){dbcontext.Entry<TEntity>(entity).State = EntityState.Added;return dbcontext.SaveChanges();}}
仓储模式:特有方法
public class DepartmentRepository : RepositoryBase<DepartmentEntity>, IDepartment
{//特有方法int SpecialFunc();
}
public interface IDepartment : IRepositoryBase<DepartmentEntity>
{ //特有方法int SpecialFunc();
}
/// <summary>
/// 仓储接口
/// </summary>
/// <typeparam name="TEntity">实体类型</typeparam>
public interface IRepositoryBase<TEntity> where TEntity : class,new()
{int Insert(TEntity entity);
}
/// <summary>
/// 仓储实现
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class RepositoryBase<TEntity> : IRepositoryBase<TEntity> where TEntity : class,new()
{public NFineDbContext dbcontext = new NFineDbContext();public int Insert(TEntity entity){dbcontext.Entry<TEntity>(entity).State = EntityState.Added;return dbcontext.SaveChanges();}}
传统三层架构多数据库实现
public class Stock : BaseDALAccess<StockInfo>, IStock{}
//// 摘要:// 数据访问层的基类public abstract class BaseDALAccess<T> : AbstractBaseDAL<T>, IBaseDAL<T> where T : BaseEntity, new(){//// 摘要:// 默认构造函数public BaseDALAccess();}
//// 摘要:// 数据访问层的超级基类,所有数据库的数据访问基类都继承自这个超级基类,包括Oracle、SqlServer、Sqlite、MySql、Access等public abstract class AbstractBaseDAL<T> where T : BaseEntity, new(){}
public interface IBaseDAL<T> where T : BaseEntity{}
public interface IStock : IBaseDAL<StockInfo>{}
/// <summary>/// 业务基类对象/// </summary>/// <typeparam name="T">业务对象类型</typeparam>public class BaseBLL<T> where T : BaseEntity, new(){#region 构造函数private string dalName = ""; /// <summary>/// BLL业务类的全名(子类必须实现),可使用this.GetType().FullName/// </summary>protected string bllFullName;/// <summary>/// 数据访问层程序集的清单文件的文件名,不包括其扩展名,可使用Assembly.GetExecutingAssembly().GetName().Name/// </summary>protected string dalAssemblyName;/// <summary>/// BLL命名空间的前缀(BLL.)/// </summary>protected string bllPrefix = "BLL.";/// <summary>/// 基础数据访问层接口对象/// </summary>protected IBaseDAL<T> baseDal = null;
}
public class Stock : BaseBLL<StockInfo>
{public Stock() : base(){base.Init(this.GetType().FullName, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);}//特殊方法调用public void SpecialFuc(){IStock dal = baseDal as IStock;}//普通方法调用public void FindSingle(){return baseDal.FindSingle();}
仓储模式和传统三层架构多数据库实现相关推荐
- 项目架构之传统三层架构和领域模型三层架构
一.架构之传统三层架构 传统三层架构是一种软件架构,是一种典型的.基于贫血模型的.面向过程的JavaWeb分层方式.该架构分为以下三个层次: 数据访问层(DAL - Data Access Layer ...
- JavaEE架构之传统三层架构,集群架构,分布式架构,微服务架构
javaEE架构 1.传统三层架构(all in one项目) 传统三层架构大致可以分为表现层,业务层和持久层(数据访问层).其中表现层负责接受请求和转发请求.业务层负责处理请求(注:事务管理,日志记 ...
- C#数据库教程7-ADO.NET三层架构和数据库DBNull问题
目录 一.数据库中创建表 1.创建数据表T_Person 2.向数据表T_Person中插入数据 3.查看插入的数据 二. 创建C# Winform工程 1.添加引用 2.编辑数据库连接配置文件 3. ...
- mysql数据库三层架构_数据库的三层架构
三层模式体系结构和数据独立性 第1.3节中列出了数据库方法的4个重要特点,其中有以下3个特点:(1)程序与数据分离(程序-数据独立性和程序-操作独立性):(2)支持多用户视图:(3)使用编目存储数据库 ...
- 浅析三层架构与MVC模式的区别
浅析三层架构与MVC模式的区别 三层架构介绍: (点击链接即可见三层架构) MVC模式介绍: MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(co ...
- 你真的了解传统IT的集中式三层架构及主流开发技术选型?!
[引言] 最近在看一本书<未来架构 从服务化到云原生>,关于技术架构这部分,结合书中内容,有一些认知和感悟. 互联网的技术架构正在经历由集中式->分布式->云平台的发展历程中. ...
- java ssh三层架构_SSH和三层架构的MVC模式的对应关系
1.MVC(Model-View-Controller)设计模式: 首先让我们了解下MVC(Model-View-Controller)的概念: MVC全名是Model View Controller ...
- 桥接模式的应用之三层架构中的业务逻辑层(BLL)与数据访问层(DAL)的解耦
各层的作用 ①用户界面层:只负责显示和采集用户操作. ②业务逻辑层:负责UI和DAL层之间的数据交换,是系统架构中体现核心价值的部分.它关注点主要集中在业务规则的制定.业务流程的实现和业务需求的有关系 ...
- 仓储模式到底是不是反模式?
[导读]仓储模式我们已耳熟能详,但当我们将其进行应用时,真的是那么得心应手吗?确定是解放了生产力吗?这到底是怎样的一个存在,确定不是反模式? 一篇详文我们探讨仓储模式,这里仅我个人的思考,若有更深刻的 ...
最新文章
- Leetcode 268. 缺失数字 解题思路及C++实现
- 【工具】win10修改默认输入法,开机直接启动谷歌输入法
- 迭代最近点(Iterative Closest Point, ICP)算法及matlab实现
- jQuery-Easyui 1.2 实现多层菜单
- 会议论文_InVisor会议论文辅导发表
- [精品]CSAPP Bomb Lab 解题报告(四)
- 一些关于图论和二叉树的
- 开发接口文档_产品经理必懂的接口文档撰写方式
- .netcore 判断是否 ajax 请求_第3部分-异步使用2-2:Ajax 之 状态码
- 虚拟局域网(VLAN)中端口tagged和untagged在多种情况下的作用
- 维宏控制卡win7 驱动_雕刻机专用维宏5.55运动驱动控制卡
- 正则表达式匹配书名号内容
- android 屏蔽系统输入法自定义输入法的详解
- jquery国际化 i18n.js
- vvic/搜款网API接口(item_get-根据ID取商品详情)
- Python(自学之旅二)
- 【路径规划】A*算法方法改进思路简析
- 四级英语测试软件,英语四级学习软件都有哪些好用啊
- JavaScript笔记(一)
- 二维测量--轮辋和轮胎的检查
热门文章
- 【翻译】通过GSoC、GSoD、LFX和Outreachy来庆祝CNCF实习的成功五周年
- Windows安装和使用binwalk
- Cohen's kappa coefficient
- Malloc源码解读三——Bins与Arena
- kong安装启动问题
- windows下,对opencv进行gcc/g++编译
- 输入3×4的矩阵 将值为负的位置和值输出
- TypeError:object of type 'type' has no len()的一种可能原因
- SSD: Single Shot MultiBox Detector
- 如何解决海外邮件发不出去