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

所以打算从网站做起,在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. 设计模式学习之路——Facade 外观模式(结构型模式)

    动机: 组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战.如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系 ...

  2. css之水平居中设置

    行内元素:     div,p{text-align:center;} 定宽块状元素:  第一宽度固定,第二margin-left和margin-right均是auto.div{border:1px ...

  3. SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search

    1. Ensure your site or shared folder in one Content Source. 2. Add file types. 3. The second step in ...

  4. xcode svn commit is not under version control (1) & git commit

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  5. GCD深入学习(1)dispatch_semaphore

    dispatch_semaphore信号量是一种基于计数器的一种多线程同步机制 在多个线程访问共有资源的时候,会因为多线程的特性引发数据出错. - (void)addData { dispatch_q ...

  6. 请问utf-8的中文是一个汉字占三个字节长度吗?

    这是个好问题,可以当作一个笔试题.先从字符编码讲起. 1.美国人首先对其英文字符进行了编码,也就是最早的ascii码,用一个字节的低7位来表示英文的128个字符,高1位统一为0: 2.后来欧洲人发现尼 ...

  7. [C#6] 0-概览

    1. C#6 新特性图谱 C#6的新特性主要由编译器(“Roslyn”)带来,并不依赖CLR和.NET Framework的升级,我们可以认为这个版本的新语言特性的主要目的为了简化代码书写方式,让我们 ...

  8. WebConfig配置文件详解

    今天看到博客园一位朋友整理的一个WebConfig配置文件详解,觉得不错,转载一下: <?xml version="1.0"?> <!--注意: 除了手动编辑此文 ...

  9. Linux rm删除大批量文件

    在使用rm删除大批量文件时,有可能会遭遇"参数列太长"(Argument list too long)的问题.如下所示 [oracle@DB-Server bdump]$ rm - ...

  10. JVM之CMS收集器

    CMS(Concurrent Mark Sweep) 最短回收停顿,适合维持响应时间上的要求. 初始标记 Initial mark:标记GC Roots能够关联到的对象.stop-mark. 并发标记 ...