MVC+Ef项目(2) 如何更改项目的生成顺序;数据库访问层Repository仓储层的实现
我们现在先来看看数据库的生成顺序

居然是 Idal层排在第一,而 web层在第二,model层反而在第三 了
我们需要把 coomon 公用层放在第一,Model层放在第二,接下来是 Idal层,dal层,然后是bll层,最后是 web层,这个顺序怎么调整呢?
点击旁边的依赖项.

分别把每个项目所依赖的项目都勾选上,最后点击确认后,我们看看生成顺序.

这样,当我们生成 web层的时候,会自动从上到下生成 common,model,idal,dal,bll层.
我们对web层进行生成一下,顺便打开输出列表,就能看到所有项目的生成顺序已经调整成我们想要的顺序了

下面开始今天的,数据库访问层 Repository的实现,回顾上次结束时候的项目如下图所示.

我们今天的任务就是对 Repository 层的实现 ,这一层是继承接口 IRepository的,所以IRepository层的每个接口,我们都需要在Repository层来实现
(1)我们在数据库访问层(YouJiao.MvcWeb.Repository) 下面添加ProductRepository.cs(产品仓储),UserInfoRepository.cs(用户仓储),这些功能是为了实现对数据库的操作,也就是增删改查,我们先实现 ProductRepository.cs , 这个需要实现接口 IProductRepository , 代码如下
public class ProductRepository : IProductRepository
{
private ModelContainer db = new ModelContainer(); //获取EF上下文的实例 public IList<Product> LoadEneities(Func<Product, bool> whereLambda)
{
return db.Product.Where(whereLambda).ToList();
} public IList<Product> LoadPageEneities<S>(int pageSize, int pageIndex, out int total,
Func<Product, bool> whereLambda, Func<Product, S> orderbyLambda, bool isAsc)
{
var tempList = db.Product.Where(whereLambda).ToList();
total = tempList.Count;
if (isAsc) //如果是升序
{
tempList = tempList.OrderBy<Product,S>(orderbyLambda)
.Skip(pageIndex * pageSize - 1) //越过多少条
.Take(pageSize).ToList(); //取出多少条
}
else
{
tempList = tempList.OrderByDescending<Product, S>(orderbyLambda)
.Skip(pageIndex * pageSize - 1)
.Take(pageSize).ToList();
}
return tempList;
} public Product AddEntity(Product model)
{
db.Product.AddObject(model);
db.SaveChanges();
return model;
} public bool DeleteEntity(Product model)
{
db.Product.Attach(model);
db.ObjectStateManager.ChangeObjectState(model, EntityState.Deleted);
return db.SaveChanges()>0;
} public bool UpdateEntity(Product model)
{
db.Product.Attach(model);
db.ObjectStateManager.ChangeObjectState(model, EntityState.Modified);
return db.SaveChanges() > 0;
}
}
OK ProductRepository(产品仓储)的实现完毕,接下来是UserInfoRepository (用户仓储)
注意了,这里会有一个问题,我们的产品仓储和用户仓储都会用到数据库的操作(增删改查),那么我们怎么办呢,想必这里大家已经清楚该怎么办了,当我们遇到公共的东西的时候我们最好能够抽象出来实现一个固定的功能的基类,然后我们只对其进行继承操作。
我们抽象出一个 BaseRepository (基仓储)
public class BaseRepository<T> where T : class // 这里约束泛型T必须是个类
{
private ModelContainer db = new ModelContainer(); //获取EF上下文的实例 public IList<T> LoadEneities(Func<T, bool> whereLambda)
{
return db.CreateObjectSet<T>().Where(whereLambda).ToList();
} public IList<T> LoadPageEneities<S>(int pageSize, int pageIndex, out int total,
Func<T, bool> whereLambda, Func<T, S> orderbyLambda, bool isAsc)
{
var tempList = db.CreateObjectSet<T>().Where(whereLambda).ToList();
total = tempList.Count;
if (isAsc) //如果是升序
{
tempList = tempList.OrderBy(orderbyLambda)
.Skip(pageIndex * pageSize - 1) //越过多少条
.Take(pageSize).ToList(); //取出多少条
}
else
{
tempList = tempList.OrderByDescending(orderbyLambda)
.Skip(pageIndex * pageSize - 1)
.Take(pageSize).ToList();
}
return tempList;
} public T AddEntity(T model)
{
db.CreateObjectSet<T>().AddObject(model);
db.SaveChanges();
return model;
} public bool DeleteEntity(T model)
{
db.CreateObjectSet<T>().Attach(model);
db.ObjectStateManager.ChangeObjectState(model, EntityState.Deleted);
return db.SaveChanges() > 0;
} public bool UpdateEntity(T model)
{
db.CreateObjectSet<T>().Attach(model);
db.ObjectStateManager.ChangeObjectState(model, EntityState.Modified);
return db.SaveChanges() > 0;
}
}
然后我们的 ProductRepository 就变成 先继承自 基仓储,然后实现了 IProductRepository
public class ProductRepository :BaseRepository<Product>,IProductRepository
{ }
同样 UserInfoRepository 也是如此
public class UserInfoRepository:BaseRepository<UserInfo>,IUserInfoRepository
{ }
如果用图来表示的话,如下

MVC+Ef项目(2) 如何更改项目的生成顺序;数据库访问层Repository仓储层的实现的更多相关文章
- MyEclipse2016项目内复制一个项目,如何更改项目的访问路径
在MyEclipse2010版本如果复制了一个项目,需要改项目的访问路径的话,可以选中项目右键,点开Properties,在顶部搜索web,就会出现如下内容,这是只需要在里面更改路径就可以了. 而在2 ...
- MVC+Ef项目(1) 项目的框架搭建
一:首先我们来搭建最基本的项目框架,这里使用MVC3作为web项目,然后我们添加几个类库项目 最后的项目如下, 其中有一个 YouJiao.MvcWeb.Repository 实际就当做是 DAL层即 ...
- Asp.net MVC + EF + Spring.Net 项目实践3
Asp.net MVC + EF + Spring.Net 项目实践 这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的 ...
- Asp.net MVC + EF + Spring.Net 项目实践(目录)
用4篇博客来搭一个MVC的框架,可能对初学者会有一些帮助,大家共勉吧.我觉得对于中小型项目,这个框架可能还是有一定的用处的,希望能够帮助到一些人. Asp.net MVC + EF + Spring. ...
- ASP.NET Core MVC+EF Core项目实战
项目背景 本项目参考于<Pro Entity Framework Core 2 for ASP.NET Core MVC>一书,项目内容为party邀请答复. 新建项目 本项目开发工具为V ...
- Layui+MVC+EF (项目从新创建开始)
最近学习Layui ,就准备通过Layui来实现之前练习的项目, 先创建一个新的Web 空项目,选MVC 新建项目 创建各种类库,模块之间添加引用,并安装必要Nuget包(EF包) 模块名称 模块 ...
- MVC+Ef项目(4) 抽象业务逻辑层BLL层
接下来,我们就要到业务逻辑层了,简单的说,业务逻辑层就是调用Repository(可以看做是DAL数据库访问层) 先来看看项目的架构 我们现在就开始来做BLL层. 同样,先编写 UserInfoS ...
- Asp.net MVC + EF + Spring.Net 项目实践(三)
这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的文件,所以用了百度):http://pan.baidu.com/s/1 ...
- MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一
抽象一个数据库访问层的统一入口(类似于EF的上下文,拿到上下文,就可以拿到所有的表).实际这个入口就是一个类,类里面有所有的仓储对应的属性.这样,只要拿到这个类的实例,就可以点出所有的仓储,我们在 R ...
随机推荐
- URAL 1152. False Mirrors (记忆化搜索 状压DP)
题目链接 题意 : 每一颗子弹破坏了三个邻近的阳台.(第N个阳台是与第1个相邻)射击后后的生存的怪物都对主角造成伤害- 如此,直到所有的怪物被消灭,求怎样射击才能受到最少伤害. 思路 : 状压,数据不 ...
- Tomcat6启用Gzip压缩功能
配置Tomcat根目录下/conf/server.xml文件: <Connector port="8080" protocol="HTTP/1.1" co ...
- Linux网络编程8——对TCP与UDP的简易封装
引言 每次使用socket通信,都会有很对相似的操作.本文,会对TCP与UDP通信做一简单封装,并生成动态库. 代码 my_socket.h #ifndef __MY_SOCKET_H__ #defi ...
- POJ2402/UVA 12050 Palindrome Numbers 数学思维
A palindrome is a word, number, or phrase that reads the same forwards as backwards. For example,the ...
- spring_150804_controller
实体类: package com.spring.model; public class DogPet { private int id; private String name; private in ...
- hdu 4664 Triangulation(题意已在讨论版中说明)
题意: 给定n个平面(平面之间相互独立),每个平面上有一些点,并且构成凸集,C和D轮流选一个平面连接两个点画线段,并保证线段之间除了端点之外没有其它交点,当平面上出现一个完整的三角形之后此平面就不能继 ...
- Properties读取资源文件的四种方法
package com.action; import java.io.InputStream; import java.util.Locale; import java.util.Properties ...
- Java科普之算法剖析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 从小白晋升,一路走来:从helloworld,到JFrame,再到Android:从城外小子,到内城 ...
- 编译FreePascal和Lazarus
一,准备目录假设我们准备将整个FreePascal环境安装到D盘的fpc目录下,那么我们需要创建以下几个目录:d:\fpc_svn\bind:\laz_svn二,准备环境1,安装SVN客户端Torto ...
- Mysql笔记——DCL
DCL数据库控制语言不同于程序设计语言,SQL语言(结构化查询语言)的组成部分包括了DCL数据库控制语言. =============== 1.创建用户 语法:CREATE USER 用户名@地址 ...