看了一堆视频教程后,感觉基本了解的差不多了,可以动手.....因为最好的学习方法就是实践嘛....

所以打算从网站做起,在WebForm和MVC之间选了MVC,因为感觉高大上...也比较灵活

于是买了两本书《ASP.NET MVC 4高级编程(第4版)》和《ASP.NET MVC 4 Web编程》,在群里有群友问,为什么要买两本...其实这是习惯啦...对于初学者来说,最先要了解的就是,这个东西大概是个什么东西....书的作者不同,介绍的侧重点也不同,买两本就为了互补一下...

mvc也大概看了一下,至少基本的控制器,试图啊,还有整个的流程都了解的差不多,准备动手了....

先说说在选择数据库访问技术上遇到的问题.....

看的教程,基本上数据库都是用EF来做的...于是也跟着用了微软官方出品高大上的Entity Framework....

Codefirst神马的太遥远,于是先打开sqlserver建库,然后写model...然后兴高采烈的就开始了...

然后不出意外的就遇到问题了

1.在深入理解完全面向对象的数据库设计方法之前,思路还是局限在sql时代(毕竟写了很多年的sql语句),这就直接导致了数据库表和Model设计的不合理

于是就有了下面的Model (省略了部分无关字段)

菜单ID,父菜单ID,菜单名字,父菜单名字......

使用的时候根据ParentCode获取到父菜单的MenuName 填充到 ParentName

    public class Menu
{
[Key]
public int MenuCode{ get; set; }
public int ParentCode { get; set; }
public string MenuName { get; set; }
[NotMapped]
public string ParentName { get; set; }

于是就有了这段 自连接(自己Join自己) 查询代码....

            var query = from a in DB.Menus
join b in DB.Menus
on a.ParentCode equals b.MenuCode into lg
from b in lg.DefaultIfEmpty()
select new SDOU.Models.Staff.Menu
{
MenuCode =a.MenuCode ,
MenuName =a.MenuName,
ParentCode =a.ParentCode ,
ParentName = b == null ? "" : b.MenuName };

啪嚓一运行,问题又来了....

我的Model明明是放在 Models.Staff.Menu ,运行的时候 EF非要给我整到DAL的命名空间下,然后告诉我无法关联实体还是什么的....总之就是自动给我把命名空间给换了.....

对于新手的我,在百度谷歌捣鼓半天也没解决问题...

后台求助大神,大神曰,你这一看就知道有问题,不是EF的问题,而是你自己的思路问题....这是在拿着EF写SQL.......(其实我想说,那当然了,我只会sql嘛).....然后大神又说,初学者如果没有面向对象的设计思想,就老老实实回去用sql吧....

既然大神的指点了,我也不去纠结到底是哪里的问题了,就算把这个命名空间问题搞定,以后用EF肯定还会遇到更多问题....这种自己连接自己的简单查询都搞不定,以后那些横跨多个表的复杂查询就更不用说了....

于是乎各方求助,百度谷歌一番知道了几个轻量级的微型ORM框架... PetaPoco,Dapper,FluentData,DataRabbit这几个推荐的比较多,有时候没有选择还好,拿来就用了,但有选择的时候反而会更加难下决定....

于是乎,就有了这个博问   http://q.cnblogs.com/q/65659/  让大神们帮我做个选择....

最后的结果就是弃用EF,启用Dapper

初学C#和MVC的一些心得,弯路,总结,还有教训(2)--关于Entity Framework的更多相关文章

  1. 初学C#和MVC的一些心得,弯路,总结,还有教训(4)--Cache 关于创建多个缓存实例

    asp.net中的数据缓存可以用 HttpRuntime.Cache ,这个是大家都知道的,但如果缓存的数据比较多,又比较杂乱,想要把缓存分开管理(也就是创建多个缓存实例)应该怎么做呢... 于是常规 ...

  2. 初学C#和MVC的一些心得,弯路,总结,还有教训(3)--Dapper

    经过一番深思熟虑,决定先用Dapper吧..... 以下是我感觉比较有用的一些东西 Dapper项目地址  https://github.com/StackExchange/dapper-dot-ne ...

  3. 初学C#和MVC的一些心得,弯路,总结,还有教训(1)--语言的选择

    因为惰性,自制力,求知欲等各方面原因....一直没有学新技术,总感觉VB6凑合能用就凑合用.... 于是大概从05年开始,几乎每次新版的vs一发布,我就下载回来,然后安装,然后,,,,就扔那了.... ...

  4. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

  5. MVC用非Entity Framework将数据显示于视图

    学习此篇之前,先看看<DataTable数据显示于MVC应用程序>http://www.cnblogs.com/insus/p/3361182.html 那是将DataTable显示于MV ...

  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  7. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之目录导航

    ASP.NET MVC with Entity Framework and CSS是2016年出版的一本比较新的.关于ASP.NET MVC.EF以及CSS技术的图书,我将尝试着翻译本书以供日后查阅. ...

随机推荐

  1. jQuery uploadify 文件上传

    uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能.现在最新版为3.2.1. 在线实例 实例预览 Uploadify 在线实例Demo ...

  2. Chocolat.js – 响应式的 jQuery Lightbox 插件

    Chocolat.js 使您能够显示一个或多个图像在同一页面上.给用户展示一组图片缩略图,可以显示全页或块.Chocolat.js 可以很好地处理所有主要的浏览器.它在下面这些浏览器测试通过:IE7+ ...

  3. jQuery.my – 实时的复杂的双向数据绑定

    jQuery.my 这个插件用于实时双向数据绑定.它发生变异给出的数据源对象,反映了用户与用户界面之间的相互作用.jQuery.my 提供了全面的验证,条件格式,复杂的依赖关系,运行形式结构操作. 马 ...

  4. Snap.svg – 现代 Web 开发必备的 JavaScript SVG 库

    SVG 是一种很好的 Web 技术方案,可以用来创建互动,在任何大小的屏幕上都会很好看.与分辨率无关的矢量图形.而这里推荐的 Snap.svg 这个 JavaScript 可以让你像 jQuery 操 ...

  5. ios页面过渡效果插件Kontext

    效果体验:http://keleyi.com/keleyi/phtml/html5/28.htm 以下是代码: <!doctype html> <html> <head& ...

  6. kmdjs指令大全

    调试 通过下面方式,可以输出kmdjs声称的类: <script src="../dist/kmd.js?debug" data-main="js/main&quo ...

  7. iOS 应用评分

    为了提高应用的用户体验,经常需要邀请用户对应用进行评分 应用评分无非就是跳转到AppStore展示自己的应用,然后由用户自己撰写评论 如何跳转到AppStore,并且展示自己的应用 方法1 NSStr ...

  8. 委托的N种写法,你喜欢哪种?

    一.委托调用方式 1. 最原始版本: delegate string PlusStringHandle(string x, string y); class Program { static void ...

  9. SQL SERVER Transactional Replication中添加新表如何不初始化整个快照

    在SQL SERVER的复制(Replication)中,有可能出现由于业务需求变更,需要新增一张表或一些表到已有的复制(发布订阅)当中,这种需求应该是很正常,也很常见的.但是在已有的复制(发布订阅) ...

  10. webForm(三)——三级联动

    三级联动 首先附图一张,初步认识一下什么是三级联动:                           注:选第一个后面两个变,选第二个,最后一个改变. 其次,做三级联动需要注意的方面:①DropD ...