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

 

居然是 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. Random的用法

    import java.util.Random; public class RandomTest { public static void main(String[] args) { Random r ...

  2. Codeforces449A Jzzhu and Chocolate && 449B Jzzhu and Cities

    CF挂0了,简直碉堡了.两道题都是正确的思路但是写残了.写个解题报告记录一下心路历程. A题问的是 一个n*m的方块的矩形上切k刀,最小的那一块最大可以是多少.不难发现如果纵向切k1刀,横向切k2刀, ...

  3. 只 一行显示可左右滚动的文本(UITextField中文限制)

    // // ViewController.m // 一行显示可滚动的文本 // // Created by apple on 15-5-8. // Copyright (c) 2015年 apple. ...

  4. Linux下Sublime Text 2的安装

    安装方法1: 通过apt-get install来安装,可以如下来做: sudo add-apt-repository ppa:webupd8team/sublime-text-2 sudo apt- ...

  5. LR_问题_平均响应时间解释,summary与analysis不一致

    Summary Report中的时间说明 Summary是按整个场景的时间来做平均的,最大最小值,也是从整个场景中取出来的. (1)       平均响应时间:事物全部响应时间做平均计算 (2)    ...

  6. 8 Types Of Friends You Need To Have in Your Life

    8 Types Of Friends You Need To Have in Your Life一生中应该有的8种类型的朋友Did you know that people without frien ...

  7. Android核心分析之十五Android输入系统之输入路径详解

       Android用户事件输入路径 1 输入路径的一般原理 按键,鼠标消息从收集到最终将发送到焦点窗口,要经历怎样的路径,是Android GWES设计方案中需要详细考虑的问题.按键,鼠标等用户消息 ...

  8. 负载均衡之Haproxy配置详解(及httpd配置)

    下图描述了使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1.web2.web3.img1.img2.但是由于haproxy会存在单点故障问题,因此使 ...

  9. ios 监听app从后台恢复到前台

    正常情况下,在AppDelegate中实现下面两个方法,能够监听从后台恢复到前台 [cpp] - (void)applicationDidEnterBackground:(UIApplication ...

  10. 迷时师度,悟了自度(时间的边际效应),附VC参考书

    12年前看过这篇文章,今天又看到了,还是有些感慨的.上课的时间虽然已经永远远去,用整块的时间去学习已经不可能,但道理还是要记着的,没准依然有用,自勉.------------------------- ...