源码学习的重要性,再一次让人信服。

ASP.NET MVC Application Using Entity Framework Code First

做MVC已经有段时间了,但看了一些CodePlex上的代码,仍然觉得需要学习的东西还很多,基本上功能都可以实现,但如果放弃去利用框架本身已经聚合与提供的便利性功能,那往往会事倍功半,即使实现,也不漂亮不专业,不舒服。

很多专业的东西都在那里,没事瞅瞅,不要动不动一上来就老三样,或者放弃好东西,用自己的老办法去经验性的解决,既然可以实现,那就要去找最漂亮的解决办法,否则何来提升。

  • 虚拟属性

//虚拟自动属性。子类可以使用overrides重写该属性,
//子类可以实现get和set访问器,以实现自定义的操作。
public virtual string Name { get; set; } // 带支持字段的虚拟属性
private int num;
public virtual int Number
{
get { return num; }
set { num = value; }
}
  • DataType

    Custom,

    DateTime,

    Date,

    Time,

    Duration,

    PhoneNumber,

    Currency,

    Text,

    Html,

    MultilineText,

    EmailAddress,

    Password,

    Url,

    ImageUrl,

    CreditCard,

    PostalCode,

    Upload,

    很多常用的验证都已经被封装好了,只需要用就可以了,不要再费劲的写正则了,亲。

MetadataTypeAttribute

[MetadataType(typeof(CustomerMetaData))]
public partial class Customer
{ }
public class CustomerMetaData
{
// Apply RequiredAttribute
[Required(ErrorMessage = "Title is required.")]
public object Title;
}

通过使用 MetadataTypeAttribute 属性,您可以将类与数据模型分部类关联。在此关联的类中,您可以提供数据模型中所没有的附加元数据信息。这样较好的区分了,DataBase中类的基本定义与Coding时类的附加性验证,使两张能够结构清晰,分工明确。

[MetadataType(typeof(CompanyMetadata))]
public partial class Company
{
public class CompanyMetadata
{
[JsonIgnore]//防止API调用中的嵌套输出
public virtual ICollection<Advertise> Advertise { get; set; }
}
}
  • rowversion

使用rowversion数据类型实现乐观锁

SQL Server 2008 提供了一个特殊数据类型rowversion,它可以用于在应用程序中实现乐观锁。rowversion数据类型在乐观锁模式下充当版本号。无论何时包含rowversion类型数据列的行被插入或更新时,SQL Server 自动为该列生成一个值。rowversion数据类型是8字节的二进制数据类型,除了保证值的唯一性和单向增长外,它的值不具有意义。你不能够查看它的每个字节来搞懂它是什么意思。

客户端从表中读取数据,确保返回的结果集中包含了主键和rowversion列,以及其他想要的数据列。由于查询并不运行在事务中,一旦数据被读取,SELECT查询获取的锁即被释放。当一段时间过后用户想要更新某行时,必须确保在此期间该数据没有被其他客户端修改过。Update语句必须包含WHERE子句用以比较取回的rowversion值与数据库中该列的当前值。如果两个值匹配(即相同),说明该行记录在此期间没有被修改过。因此可以放心提交更改。如果不匹配,则说明该行记录已经被修改过。为了避免Lost Update问题发生,不应提交本次更新。

  • Linq to SQl 与传统SQl语句的整合

ViewBag.RowsAffected = db.Database.ExecuteSqlCommand("UPDATE Course SET Credits = Credits * {0}", multiplier); string query = "SELECT EnrollmentDate, COUNT(*) AS StudentCount "
+ "FROM Person "
+ "WHERE Discriminator = 'Student' "
+ "GROUP BY EnrollmentDate";
IEnumerable<EnrollmentDateGroup> data = db.Database.SqlQuery<EnrollmentDateGroup>(query); IQueryable<Course> courses = db.Courses;
var sql = courses.ToString(); * **延迟,饿汉,以及显式加载关联数据** var departments = context.Departments;
foreach(Department d in departments)
{foreach get course.}
//Lazy Loading当第一次访问关联属性时,关联数据才会被自动读取。 var departments = context.Departments.Include(x=x.Course){foreach,foreach get course}
//Eager Loading 当实体加载时,相关联的数据也一起被加载。性能最好,因为只给Db发送一次查询。 var departments = context.Departments.ToList();
Context.Entry(d).Collection(x=>x.Courses).Load();
//Explict Loading 类似于延迟加载,如果不常访问关联实体属性,或仅访问一小部分,则延迟加载更有效。 数据库上下文默认支持延迟加载,有两种方法可以关闭延迟加载:
对于特定的导航属性,在定义属性的时候取消 virtual
对于所有的导航属性,设置 LazyLoadingEnabled 为假。

源码学习之ASP.NET MVC Application Using Entity Framework的更多相关文章

  1. MVC中使用EF(1):为ASP.NET MVC程序创建Entity Framework数据模型

    为ASP.NET MVC程序创建Entity Framework数据模型 (1 of 10) By  Tom Dykstra |July 30, 2013 Translated by litdwg   ...

  2. Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  3. Asp.Net MVC 模型(使用Entity Framework创建模型类)

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  4. 【源码】进入ASP.NET MVC流程的大门 - UrlRoutingModule

    UrlRoutingModule的功能 在ASP.NET MVC的请求过程中,UrlRoutingModule的作用是拦截当前的请求URL,通过URL来解析出RouteData,为后续的一系列流程提供 ...

  5. 权限管理系统源码分析(ASP.NET MVC 4.0 + easyui + EF6.0 + MYSQL/MSSQLSERVER +微软企业库5.0+日志绶存)

    系统采用最先进技术开发: (ASP.NET MVC 4.0 + easyui + EF6.0 + MYSQL/MSSQLSERVER +微软企业库5.0+日志绶存) 大家可以加我QQ讨论 309159 ...

  6. SpringMVC源码学习:容器初始化+MVC初始化+请求分发处理+参数解析+返回值解析+视图解析

    目录 一.前言 二.初始化 1. 容器初始化 根容器查找的方法 容器创建的方法 加载配置文件信息 2. MVC的初始化 文件上传解析器 区域信息解析器 handler映射信息解析 3. Handler ...

  7. 源码的说明 ASP.NET MVC 5框架揭秘.zip

    第1章 S101 MVP(SC)模式中Presenter与View之间的交互 S102 迷你版的ASP.NET MVC框架 第2章 S201 通过路由实现请求地址与.aspx页面的映射 S202 基本 ...

  8. asp.net mvc 之旅 —— 第五站 从源码中分析asp.net mvc 中的TempData

    在mvc的controller中,我们知道有很多的临时变量存放数据,比如说viewData,viewBag,还有一个比较特殊的tempData,关于前两个或许大家都明白, 基本上是一个东西,就是各自的 ...

  9. 【Spark2.0源码学习】-8.SparkContext与Application介绍

             在前面的内容,我们针对于RpcEndpoint启动以及RpcEndpoint消息处理机制进行了详细的介绍,在我们的大脑里,基本上可以构建Spark各节点的模样.接下来的章节将会从Sp ...

随机推荐

  1. 【衡阳八中noip模拟题】国色天香

    庭前芍药妖无格,池上芙蕖净少情.唯有牡丹真国色,花开时节动京城.——唐·刘禹锡<赏牡丹>芍药花再红终究妖艳无格.终不及牡丹,国色天香.——乌拉那拉氏宜修华妃总是想要用自己的气焰打压皇后,正 ...

  2. 限制TextBox输入,只能输入整数

    public class TextBoxInt : TextBox { public TextBoxInt() { KeyDown += TextBoxInt_KeyDown; TextChanged ...

  3. 使用plist的好处

    首先:帮助节省内存.OpenGL ES纹理要求宽和高都是2的n次幂的倍数.我们可以考虑将小的图片拼大图片,然后统一加载.  其次:提高渲染速度.OpenGL ES要求切换的纹理越少越好,将图片拼成大图 ...

  4. WPS Office手机版调用接口代码指导帖之一(Android)

    经常会有一些喜欢开发鼓捣的童鞋问我们,WPS Office手机版是否提供调用接口,希望在android中使用一个调用命令,直接调用WPS手机版来打开指定的DOC文件,而不用弹出一个程序可选列表(如果用 ...

  5. css案例学习之层叠样式

    代码 <html> <head> <title>层叠特性</title> <style type="text/css"> ...

  6. nexus 7 2013 驱动安装及root

    驱动安装 Nexus 7 2013连接上电脑后,设备管理器显示新设备 nexus 7 待安装驱动(其实是MTP设备待安装驱动).去谷歌网站下载最新的USB驱动,version 8.0 的.与以前的版本 ...

  7. 用Express搭建 blog (一)

    Info 公司马上要举行 hack day 了,这次决定和小伙伴用 Express 作为框架来搭建我们的应用,所以昨天搭出来UI后,今天开始系统的学习下 Express. Start 首先是expre ...

  8. hdu 4740

    题目链接 老虎左拐,老鼠右拐,碰到不能走的拐一次,如果还不能走就停下,自己走过的不能走,求相遇的坐标或-1 一个停下之后,另一个还可以走 #include <cstdio> #includ ...

  9. 深入理解java String 对象的不可变性

    下面我们通过一组图表来解释Java字符串的不可变性 1.声明一个String对象 String s = "abcd"; 2.将一个String变量赋值给另一个String变量 St ...

  10. vb.net中让控件内容为空(Control类)

    在平常的敲系统中大家有没有遇到需要让Textbox控件或者其他的控件的显示内容为空,以前直接的做法是直接等于空值,如果此类控件有很多,都需要空值,难道都要设置一下它的值为空嘛,显然这是一个笨办法,有没 ...