一:首先我们来搭建最基本的项目框架,这里使用MVC3作为web项目,然后我们添加几个类库项目

最后的项目如下, 其中有一个 YouJiao.MvcWeb.Repository 实际就当做是 DAL层即可  数据库访问层

当层多了以后,我们添加几个解决方案文件夹,这样项目看起来就清楚一些

因为现在还没有开始写接口,所以 接口的 解决方案文件夹 还是空的.

 

二:开始在Model层里面添加  EF  实体,生成数据库

我们根据EF的实体模型来生成数据库,会提示你链接数据库,例如下面我就是链接了sql2005数据库,并生成了一个新的名为 MvcWeb的数据库

到此,数据库完成(会自动帮你在sql2005数据库里面创建一个数据库).

三: 数据库访问层 的实现

3.1Model模型设计好之后,就开始  数据库访问层,先写接口

3.2 下面数据库里面2个表的接口      IUserInfoRepository.cs  和  IProductRepository.cs

这里有个问题, 关于项目层与项目层之间的引用问题.  例如 这里  IRepository层是 需要引用 Model层的实体的, 而BLL层是需要对 IRepository进行引用的,如果直接进行项目直接的引用,当项目多了之后(例如有超过10个项目在一个解决方案里面),项目和项目直接的引用会变的很麻烦,如果一个项目是由其他人编写,并且编写后是有错误的,那么你自己的项目也编译不过去了,所以这个时候,我们要修改一下每个项目生成的路径,统一放到一个  Library 文件夹,  如果有其他项目需要对 程序集进行引用,那么就到这个文件夹进行引用就可以了

我们把除了web项目的所有的项目,都更改了一下生成的路径为 ..\Library 文件夹

生成一下解决方案,我们去Library 文件夹去看看

这个时候就OK了,我们去 IRepository层上引用一下Library文件夹下的 Model层的程序集即可.

(因为我们引用的Model里面是用EF来做实体的,所以还要引用)

IUserInfoRepository 的代码如下   包含 增删改查 分页

/// <summary>
/// 用户实体 的DAL接口
/// </summary>
public interface IUserInfoRepository
{
/// <summary>
/// 根据传入 lambda 进行条件过滤,获取实体
/// </summary>
/// <returns></returns>
IList<UserInfo> LoadEneities(Func<UserInfo,bool> whereLambda); /// <summary>
/// 根据传入 lambda 进行条件过滤,并且分页后获取实体
/// </summary>
/// <typeparam name="S">泛型</typeparam>
/// <param name="pageSize">分页大小</param>
/// <param name="pageIndex">分页的页数</param>
/// <param name="total">返回值</param>
/// <param name="whereLambda"></param>
/// <param name="orderbyLambda">根据方法的泛型传入值来进行排序</param>
/// <param name="isAsc">正序/倒序</param>
/// <returns></returns>
IList<UserInfo> LoadPageEneities<S>(int pageSize,int pageIndex,out int total,
Func<UserInfo,bool> whereLambda,Func<UserInfo,S> orderbyLambda, bool isAsc ); UserInfo AddEntity(UserInfo model); bool DeleteEntity(UserInfo model); bool UpdateEntity(UserInfo model); }

然后我们现在开始去写另外一个实体的接口  IProductRepository  , 代码其实跟上面的 UserInfo的实体的接口也一样,

如果我们有几十个实体,每个实体都要写对应的数据库访问层约束接口么?太麻烦了,所以我们抽象出一个数据库访问层的基接口 IBaseRepository

只要我们的基接口写好了,其他的实体继承一下基接口  就好了  .  先把刚才的 IUserInfoRepository接口里面的代码拷贝过来,然后进行修改

我们把基接口里面的UserInfo类进行替换,修改后的基接口如下

/// <summary>
/// 针对所有实体的数据库访问层的约束
/// </summary>
public interface IBaseRepository<T> where T : class,new() // 这里约束泛型T必须是个类,并且有一个构造函数
{
//我们先把刚才写完的 IUserInfoRepository 拷贝到这里来,进行修改 IList<T> LoadEneities(Func<T, bool> whereLambda);
IList<T> LoadPageEneities<S>(int pageSize, int pageIndex, out int total,
Func<T, bool> whereLambda, Func<T, S> orderbyLambda, bool isAsc);
T AddEntity(T model); bool DeleteEntity(T model); bool UpdateEntity(T model);
}

这样基接口就写完了,我们刚才的IUserInfoRepository也可以改写成如下,只要继承自基接口 即可

/// <summary>
/// UserInfo实体对数据库访问层的约束
/// </summary>
public interface IUserInfoRepository:IBaseRepository<UserInfo>
{
}

同理,IProductRepository接口也继承自基接口

/// <summary>
/// 产品Product实体 的DAL接口
/// </summary>
public interface IProductRepository:IBaseRepository<Product>
{
//IProductRepository接口继承了基接口里面的所有的方法
}

 

3.2 接口写完后,我们来写 接口的实现

MVC+Ef项目(1) 项目的框架搭建的更多相关文章

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

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

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

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

  3. Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建

    目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...

  4. 01-电子商城项目介绍及ssm框架搭建

    1.B2C电商项目功能及架构 1.1功能列表 1.2系统架构(soa架构) 2.后台管理系统工程搭建及测试 ypMall,ypMall-manager-web ypMall为父项目,管理子项目的jar ...

  5. .NET Core MVC Web最最最基础的框架搭建

    1. 使用VS创建.NET Core MVC Web项目 创建完成就是酱紫的了 2. 用NuGet把这些全部都安装了 Install-Package Microsoft.EntityFramework ...

  6. Asp.net MVC + EF + Spring.Net 项目实践(二)

    这一篇主要介绍数据库和entity framework集成 1. 先创建数据库,很简单的几张表,但也涉及了一些主外键关系.联合主键等,关系图如下(DB脚本在最后) 2. 打开VS,现在建立Model实 ...

  7. Asp.net MVC + EF + Spring.Net 项目实践(一)

    准备用几篇文章来做一个MVC的例子,为了给新同事做参考,也为自己做个知识储备. 首先,用VS2013创建一个空白解决方案StudentManageSystem,然后添加一个MVC应用程序(可参考ASP ...

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

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

  9. Asp.net MVC + EF + Spring.Net 项目实践(四)

    这篇写一写如何使用Spring.net来解耦各个项目 1. 在接口层添加IStudentBLL文件,里面有GetStudent和GetAllStudents两个方法:然后在StudentBLL类里实现 ...

  10. [SSM项目]二-项目设计和框架搭建

    一 10个实体类 选择Integer 而不是int的原因 :当值为空时,int类型会自动为其初始化,这是我们不希望的. 二 配置Maven 目录结构: src/main/java:业务代码 src/m ...

随机推荐

  1. 使用 polyfills 的简易方法

    本文作者为 Andrew Betts 与 Robert Nyman.Andrew 是金融时报(Financial Times)实验室主任,该实验室旨在金融时报开发并推广实践性的 Web 技术.Robe ...

  2. (9)nehe教程3--添加颜色

    添加颜色: 作为第二课的扩展,我将叫你如何使用颜色.你将理解两种着色模式,在左图中,三角形用的是光滑着色,四边形用的是平面着色. 上一课中我教给您三角形和四边形的绘制方法.这一课我将教您给三角形和四边 ...

  3. Understanding node.js

    Node.js has generally caused two reactions in people I've introduced it to. Basically people either ...

  4. 一个简单的ObjC和JavaScript交互工具

    https://github.com/changjianfeishui/XBWebBridge ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只 ...

  5. mysql主从配置(转载)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://369369.blog.51cto.com/319630/790921 还可以参考 ...

  6. iOS LLDB调试器和断点调试

    技巧一:运行时修改变量的值 你以前怎么验证是不是某个变量的值导致整段程序不能正常工作?修改代码中的变量的值,然后cmd+r重新启动app?现在你不需要这么做了,只需要设置一个断点,当程序在这进入调试模 ...

  7. 290. Word Pattern

    题目: Given a pattern and a string str, find if str follows the same pattern. Here follow means a full ...

  8. RHEL7-使用Apache服务部署静态网站

    1. 安装Apache服务程序 1.1 在虚拟机中选中光盘镜像,并设置连接 1.2 将光盘设备挂载到/media/cdrom目录 [root@localhost ~]# mkdir -p /media ...

  9. Spring框架学习 - 配置

    [资料] ★★☆ Spring 中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.Servl ...

  10. lua简化cocos2dx的Action动画序列

    情景 今天写代码时,又要写一个很常见的动画,就是变大变小模拟那个弹性的赶脚,很常用但写起来挺麻烦,封装一下用起来就简单多了. 当然我也知道有缓动动画(EaseAction)可以实现反弹效果,但这不是重 ...