我们现在先来看看数据库的生成顺序

 

居然是 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仓储层的实现的更多相关文章

  1. MyEclipse2016项目内复制一个项目,如何更改项目的访问路径

    在MyEclipse2010版本如果复制了一个项目,需要改项目的访问路径的话,可以选中项目右键,点开Properties,在顶部搜索web,就会出现如下内容,这是只需要在里面更改路径就可以了. 而在2 ...

  2. MVC+Ef项目(1) 项目的框架搭建

    一:首先我们来搭建最基本的项目框架,这里使用MVC3作为web项目,然后我们添加几个类库项目 最后的项目如下, 其中有一个 YouJiao.MvcWeb.Repository 实际就当做是 DAL层即 ...

  3. Asp.net MVC + EF + Spring.Net 项目实践3

    Asp.net MVC + EF + Spring.Net 项目实践 这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的 ...

  4. Asp.net MVC + EF + Spring.Net 项目实践(目录)

    用4篇博客来搭一个MVC的框架,可能对初学者会有一些帮助,大家共勉吧.我觉得对于中小型项目,这个框架可能还是有一定的用处的,希望能够帮助到一些人. Asp.net MVC + EF + Spring. ...

  5. ASP.NET Core MVC+EF Core项目实战

    项目背景 本项目参考于<Pro Entity Framework Core 2 for ASP.NET Core MVC>一书,项目内容为party邀请答复. 新建项目 本项目开发工具为V ...

  6. Layui+MVC+EF (项目从新创建开始)

    最近学习Layui ,就准备通过Layui来实现之前练习的项目, 先创建一个新的Web 空项目,选MVC 新建项目 创建各种类库,模块之间添加引用,并安装必要Nuget包(EF包)   模块名称 模块 ...

  7. MVC+Ef项目(4) 抽象业务逻辑层BLL层

    接下来,我们就要到业务逻辑层了,简单的说,业务逻辑层就是调用Repository(可以看做是DAL数据库访问层) 先来看看项目的架构 我们现在就开始来做BLL层.  同样,先编写  UserInfoS ...

  8. Asp.net MVC + EF + Spring.Net 项目实践(三)

    这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的文件,所以用了百度):http://pan.baidu.com/s/1 ...

  9. MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一

    抽象一个数据库访问层的统一入口(类似于EF的上下文,拿到上下文,就可以拿到所有的表).实际这个入口就是一个类,类里面有所有的仓储对应的属性.这样,只要拿到这个类的实例,就可以点出所有的仓储,我们在 R ...

随机推荐

  1. Sublime Text 编辑器

    1.从http://www.sublimetext.com/2 下载Sublime Text 2编辑器. 2.安装Package Control 管理器,用于管理和安装插件包. 下载地址:https: ...

  2. C++ 第一次上机作业

    今天完成了C++第一次上机作业,感觉比较简单. 题目: 求2个数或3个正整数中的最大数,用带有默认参数的函数实现. 对3个变量按由小到大顺序排序,要求使用变量的引用. 编写一个程序,用同一个函数名对几 ...

  3. JAVA类型信息——反射机制

    JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...

  4. 妙味课堂——HTML+CSS(第二课)

    常见标签——img标签 <img src="图片地址" alt="图片名"/> alt属性是图片名字,是给百度搜索引擎抓取使用的.也有当图片地址不正 ...

  5. JDBC第二次学习

    脑子太笨,必须得记录下来一些文字,方便回来查询. 这是我的第二次学习JDBC的笔记,看的是传智播客——李勇老师的JDBC系列,已看到第23集. 分析在实际项目中该如何应用JDBC 一个简单用户相关的数 ...

  6. WinDbg调试流程的学习及对TP反调试的探索

    基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...

  7. 01 - 开发成功的Oracle应用

    笔记 1. 开发数据库应用,不能把数据库当黑盒.需要了解数据库的一下内容 数据库的体系结构 并发控制 开发的时候就要调优你的代码 数据库有哪些特性,不要在你的代码里重复实现 深入的学习SQL 2. 我 ...

  8. Map中如何把没有定义操作符<的类作为key

    Map中如何把没有定义操作符<的类作为key 其实,为了实现快速查找,map内部本身就是按序存储的(比如红黑树).在我们插入<key, value>键值对时,就会按照key的大小顺序 ...

  9. TWinControl与TControl的覆盖函数(TWinControl对TControl的10个消息覆盖函数,17个覆盖函数,私有虚函数仍可多态)

    手工找出来,对比一下,有助于VCL框架的理解.----------------------------------------------------------------------------- ...

  10. 5、java反射基础

    Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造 ...