:此处关于c#语言特点见另一篇转载的文章

当前结构MVVC

总结:


Controller(接受请求,返回View)

View(前端页面,一个viewmodel(看做var data)对应一个View)

Model(对于数据库中表基本操作而生成的很纯净的类)

ViewModel(强类型视图,相当于ashx nvelocity里的 var data匿名类,所以一个viewmodel对应一个view)

BusinessLayer(涉及到对于Model里对象进行进一步处理,生成对应的ViewModel再由controller return(view,viewmodel))

DataAccessLayer  与数据库直接通信,通过在其中new实体获得数据库上下文dbcontext(或db),再编写linq(linq语句中会用到dbcontext),来获取数据集合

  1. BSL与DAL的区别是什么呢?我觉得最大得是DAL是直接与数据库打交道,通过linq获取相应的数据,当然linq可能写的胡里花哨但相对来说比较原始;而BSL负责接收DAL对应数据进一步处理。最好是直接返回ViewModel需要的数据,这样将会使controller更纯净
  2. 和ashx nvelocity进行对比,其实挺容易理解的,重点是把ViewModel之于View 类比为var data 之于渲染的那个页面。

    MVC

    return View("myView",employeeViewModel);
    

    ashx

    var data = {data = ....}
    String html = commonHelper.RenderHtml("test.html",data)
  3. 模板语法。默认是Razor 但是Nvelocity也能用,个人感觉Razor语法比nvelocity复杂,功能也应该全面一些
  4. View中若使用强类型视图即ViewModel记得在头部加:
    @using Webapplication. ...
    @model xxxViewModel

数据访问层 EF框架

简述实体框架(EF)

EF是一种ORM工具,ORM表示对象关联映射。

在RDMS中,对象称为表格和列对象,而在.net中(面向对象)称为类,对象以及属性。

任何数据驱动的应用实现的方式有两种:

1. 通过代码与数据库关联(称为数据访问层或数据逻辑层)

2. 通过编写代码将数据库数据映射到面向对象数据,或反向操作。

ORM是一种能够自动完成这两种方式的工具。EF是微软的ORM工具。

什么是代码优先的方法?

EF提供了三种方式来实现项目:

l 数据库优先方法——创建数据库,包含表,列以及表之间的关系等,EF会根据数据库生成相应的Model类(业务实体)及数据访问层代码。

l 模型优先方法——模型优先指模型类及模型之间的关系是由Model设计人员在VS中手动生成和设计的,EF将模型生成数据访问层和数据库。

l 代码优先方法——代码优先指手动创建POCO类。这些类之间的关系使用代码定义。当应用程序首次执行时,EF将在数据库服务器中自动生成数据访问层以及相应的数据库。

什么是POCO类?

POCO即Plain Old CLR对象,POCO类就是已经创建的简单.Net类。在上两节的实例中,Employee类就是一个简单的POCO类。

实际操作

实验八(EF 代码优先)
  1. 此次又添加了DataAccessLayer,在里边新建了SalesERPDAL类,继承了Dbcontext类,并重写了其中的OnModelCreating方法,达到的效果就是在数据库里自动建了一张表,表名TblEmployee,列名是根据model里的employee类生成的。

    public class SalesERPDAL:DbContext{public DbSet<Employee> Employees { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Entity<Employee>().ToTable("TblEmployee");base.OnModelCreating(modelBuilder);}}
  2. 所以相应的改动就发生在了BS层上,通过调用DAL层,利用ToList方法直接获得数据库中所有employee。之后再由controller调用。
    public class employeesBSL{public List<Employee> GetEmployees(){//List<Employee> emps = new List<Employee>();//Employee emp1 = new Employee();//emp1.FirstName = "DJ";//emp1.LastName = "Snake";//emp1.Salary = -1;//emps.Add(emp1);//Employee emp2 = new Employee();//emp2.FirstName = "FK";//emp2.LastName = "lalake";//emp2.Salary = 21;//emps.Add(emp2);//Employee emp3 = new Employee();//emp3.FirstName = "DK";//emp3.LastName = "lightke";//emp3.Salary = -1;//emps.Add(emp3);SalesERPDAL salesDal = new SalesERPDAL();return salesDal.Employees.ToList() ;}}
  3. EF框架连数据库的连接字符串写法注意,此处因为连接字符串的name与DAL层的SalesEPRDal相同,所以数据库和SalesDal可以直接通信
    <connectionStrings><!--<add name="connstr" connectionString="Data Source=LENOVO-PC\SQLEXPRESS01;Initial Catalog=schoolManagement;Persist Security Info=True;User ID=sa;Password=12345;"></add>--><add connectionString="Data Source=LENOVO-PC\SQLEXPRESS01;Initial Catalog=SalesERPDB;Integrated Security=True;User ID=sa;Password=12345;"name="SalesERPDAL" providerName="System.Data.SqlClient"/></connectionStrings>
  4. 感觉以上由Employee类来生成数据库表的方法并不常用。

插一个,《七天》系列并没有介绍数据库优先的相关内容,所以此处插一些从其他地方找来的关于数据库优先的内容


找到了一个数据库优先的相关文章在收藏里,主要讲的从数据库映射过来的阶段,下面贴一个用

ef(dbcontext)进行查询,有部分Linq 的文章一共分为三篇

第一篇:http://www.cnblogs.com/telon/p/4092869.html

  1. 使用linq 搭配dbcontext 的local load方法,把数据从数据库调到内存中再进行处理。减轻数据库查询方面是蛮好的,但是记住把所有的数据都加载到内存中是一个昂贵的操作,如果你运行多个查询而仅仅是返回你数据的子集,你可以仅仅把你需要的数据加载到内存中,而不是把所有数据。

    {using (var context = new BreakAwayContext()){context.Destinations.Load();var sortedDestinations = from d in context.Destinations.Localorderby d.Nameselect d;Console.WriteLine("All Destinations:");foreach (var destination in sortedDestinations){Console.WriteLine(destination.Name);}var aussieDestinations = from d in context.Destinations.Localwhere d.Country == "Australia"select d;Console.WriteLine();Console.WriteLine("Australian Destinations:");foreach (var destination in aussieDestinations){Console.WriteLine(destination.Name);}}

数据库优先的简单实战-schoolManagement

  1. 上午用mvc模式吧schoolmangemnet里的班级表循环输出了一下,文件结构是:
  2. 用数据库优先生成了schoolManagement的edmx文件;
  3. 在DAL层建立了schoolManagementDAL.cs,里面就一个getClasses()函数return一个list,函数里面通过使用schoolManagementEntity来new一个数据库上下文db,再通过linq的query获取一个class集合
    public class schoolMangementDAL:DbContext{public List<@class> GetClasses(){schoolManagementEntities db = new schoolManagementEntities();var query = from d in db.classes select d;return query.ToList();}}
  4. BSL层里有SchoolManagementBSL.cs,因为本实验没有对class做更多的处理,所以BSL层也只是new了一个schoolManagementDAL,调用了getclasses(),以便后续controller从BSL取数据;
    public class SchoolMangeBSL{ public static List<@class> test(){schoolMangementDAL smDAL = new schoolMangementDAL();List<@class> classes = smDAL.GetClasses();return classes;}}
  5. ViewModel层,新建了一个classesViewModel.cs,就一个属性List<@class>;
    public class classesViewModel{public List<@class> classes { get; set; }}
  6. controller中把从BSL获取的list赋给classesViewModel,再return View(“classes”,classesViewModel);
    public ActionResult Index(){List<@class> classes = SchoolMangeBSL.test();classesViewModel cVD = new classesViewModel();cVD.classes = classes;return View("classes",cVD);}
  7. View中注意@using 以及@model的写法 所以直接@foreach(@class c in @model.classes).这里不要混淆,@class是实体名称
    @{Layout = null;
    }
    @using WebApplication1.ViewModels
    @using WebApplication1.Models
    @model classesViewModel
    <!DOCTYPE html><html>
    <head><meta name="viewport" content="width=device-width" /><title>classes</title>
    </head>
    <body><div>hello<hr /><table><tr><td>id</td><td>name</td><td>teacherId</td></tr>@foreach(@class c in Model.classes){<tr><td>@c.id</td><td>@c.name</td><td>@c.teacherId</td></tr>}</table></div>
    </body>
    </html>
    
  8. 感觉里面的重点就是DAL层用EF获取数据库中数据的方法
  9. 最后其实有些疑问:为啥数据库优先生成的实体里是@class?;edmx里class的导航属性为啥会有一个class1,class2?
  10. 最后建个备忘吧,有关ef数据库优先的这部分,有一些资料是宋鑫给的在u盘里

试了一下linq  var query = ...,试了一下dbcontext的查询

实验九
  1. 将访问employee的路径改为了Employee/index,当然要修改对应的controller和view的名字。
  2. controller中新增加addNew方法,view中增加CreateEmployee
  3. index上链到addNew的a标签的href写
    <a href="/Employee/addNew">add employee</a>

    有些特殊,在浏览器中把鼠标悬停到其上时显示http://localhost:1352/Employee/addNew

c#中可以这么写

class A{public string name{get;set;}public string address{get;set;}private int num;public int Num{get{return num;}set{num = value;}}}

对于private成员,通过调用Num来实现安全访问

【c#】 MVC模式 ——《七天学会》系列学习心得相关推荐

  1. 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC

    七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)-- ...

  2. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)- ...

  3. 七天学会ASP.NET MVC

    七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)--ASP. ...

  4. 七天学会ASP.NET MVC(七)——创建单页应用

    目录 引言 最后一篇学什么 实验32-整理项目组织结构 关于实验32 实验33--创建单页应用--第一部分-安装 什么是Areas? 关于实验33 实验34--创建单页应用--第二部分-显示Emplo ...

  5. MVC模式在游戏开发的应用

    原地址: http://www.cocoachina.com/gamedev/2012/1129/5212.html MVC是三个单词的缩写,分别为:模型(Model).视图(View)和控制Cont ...

  6. mvc模式网页购物车

    本学期学习JSP和Servlet后,老师要求使用MVC模式下编写一个网页购物车,以下是一些主要代码及开发心得 这个是包的截图 先是注册页面,编写一个表单,表单方法调用另一个JSP页面(因为我这个页面是 ...

  7. 七天学会Node.js(汇总)

    七天学会Node.js(汇总) 文章目录 七天学会Node.js(汇总) 1. NodeJS基础 什么是NodeJS 有啥用处 如何安装 安装程序 编译安装 如何运行 权限问题 模块 require ...

  8. jsp的MVC模式设计用户登陆注册

    jsp的MVC模式设计用户登陆注册 用户登陆功能 1.实验内容 2.实验步骤 3.实验结果 4.实验分析 用户登陆功能 通过设计用户的登陆和注册,来学习jsp的MVC模式,熟练掌握MVC模式各部分的内 ...

  9. Standup Timer的MVC模式及项目结构分析

    前言 学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用.从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的 ...

最新文章

  1. linux系统安全设置
  2. 做python自动化得时候怎么添加断言_在编写Web自动化测试用例的时候,如何写断言使新手不解,严格意义上来讲,没有断言的自动化脚本不能叫测试用例。就像功能测试一样,当测试人员做了一些操作...
  3. 20135219洪韶武——信息安全系统设计基础第五周学习总结
  4. python matplotlib:figure,add_subplot,subplot,subplots讲解实现
  5. 腾讯云加入自媒体分享计划可以免费领取.cn域名啦
  6. [react] 在React中组件的state和setState有什么区别?
  7. C++学习之路 | PTA乙级—— 1013 数素数 (20分)(精简)
  8. [Python] 创建一个整数列表:range()
  9. PHPExcel导出文件
  10. caffe的python接口学习:caffemodel中的参数及特征的抽取(转载)
  11. 【Error】:10061由于目标计算机积极拒绝,无法连接
  12. 基于同一主机配置 Oracle 11g Data Guard
  13. 华为LACP的相关配置命令
  14. c语言硬币个数最小值,c语言 PTA day4 将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?...
  15. 6.WIN10 short cut
  16. fantastic-matplotlib: 第一回:Matplotlib初相识
  17. kubernetes资源管理平台ratel
  18. Soft Diffusion:谷歌新框架从通用扩散过程中正确调度、学习和采样
  19. 国际期货和国内期货的区别带招商
  20. oracle怎么新开账期,oracle成本核算

热门文章

  1. 【渝粤题库】陕西师范大学209008 教师伦理学 作业
  2. composer install 中出现用户名密码错误问题的解决方法
  3. 蓝牙 aptx android,没错,现在蓝牙耳机可以开始谈音质了 高通aptX HD SONY LDAC
  4. 计算机上u盘变成快捷方式,win7系统U盘文件都变成快捷方式的解决方法
  5. 这些操作技巧能够让你的公众号迅速增粉
  6. 分析classpath、path、JAVA_HOME的作用及JAVA环境变量配置(转发博客园)
  7. android欢迎页广告
  8. CAD打印怎么布满图纸?
  9. linux内核就是外包公司老板
  10. 中国线上驾驶游戏市场深度研究分析报告