源码学习之ASP.NET MVC Application Using Entity Framework
源码学习的重要性,再一次让人信服。
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的更多相关文章
- 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 ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类)
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- 【源码】进入ASP.NET MVC流程的大门 - UrlRoutingModule
UrlRoutingModule的功能 在ASP.NET MVC的请求过程中,UrlRoutingModule的作用是拦截当前的请求URL,通过URL来解析出RouteData,为后续的一系列流程提供 ...
- 权限管理系统源码分析(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 ...
- SpringMVC源码学习:容器初始化+MVC初始化+请求分发处理+参数解析+返回值解析+视图解析
目录 一.前言 二.初始化 1. 容器初始化 根容器查找的方法 容器创建的方法 加载配置文件信息 2. MVC的初始化 文件上传解析器 区域信息解析器 handler映射信息解析 3. Handler ...
- 源码的说明 ASP.NET MVC 5框架揭秘.zip
第1章 S101 MVP(SC)模式中Presenter与View之间的交互 S102 迷你版的ASP.NET MVC框架 第2章 S201 通过路由实现请求地址与.aspx页面的映射 S202 基本 ...
- asp.net mvc 之旅 —— 第五站 从源码中分析asp.net mvc 中的TempData
在mvc的controller中,我们知道有很多的临时变量存放数据,比如说viewData,viewBag,还有一个比较特殊的tempData,关于前两个或许大家都明白, 基本上是一个东西,就是各自的 ...
- 【Spark2.0源码学习】-8.SparkContext与Application介绍
在前面的内容,我们针对于RpcEndpoint启动以及RpcEndpoint消息处理机制进行了详细的介绍,在我们的大脑里,基本上可以构建Spark各节点的模样.接下来的章节将会从Sp ...
随机推荐
- 【衡阳八中noip模拟题】国色天香
庭前芍药妖无格,池上芙蕖净少情.唯有牡丹真国色,花开时节动京城.——唐·刘禹锡<赏牡丹>芍药花再红终究妖艳无格.终不及牡丹,国色天香.——乌拉那拉氏宜修华妃总是想要用自己的气焰打压皇后,正 ...
- 限制TextBox输入,只能输入整数
public class TextBoxInt : TextBox { public TextBoxInt() { KeyDown += TextBoxInt_KeyDown; TextChanged ...
- 使用plist的好处
首先:帮助节省内存.OpenGL ES纹理要求宽和高都是2的n次幂的倍数.我们可以考虑将小的图片拼大图片,然后统一加载. 其次:提高渲染速度.OpenGL ES要求切换的纹理越少越好,将图片拼成大图 ...
- WPS Office手机版调用接口代码指导帖之一(Android)
经常会有一些喜欢开发鼓捣的童鞋问我们,WPS Office手机版是否提供调用接口,希望在android中使用一个调用命令,直接调用WPS手机版来打开指定的DOC文件,而不用弹出一个程序可选列表(如果用 ...
- css案例学习之层叠样式
代码 <html> <head> <title>层叠特性</title> <style type="text/css"> ...
- nexus 7 2013 驱动安装及root
驱动安装 Nexus 7 2013连接上电脑后,设备管理器显示新设备 nexus 7 待安装驱动(其实是MTP设备待安装驱动).去谷歌网站下载最新的USB驱动,version 8.0 的.与以前的版本 ...
- 用Express搭建 blog (一)
Info 公司马上要举行 hack day 了,这次决定和小伙伴用 Express 作为框架来搭建我们的应用,所以昨天搭出来UI后,今天开始系统的学习下 Express. Start 首先是expre ...
- hdu 4740
题目链接 老虎左拐,老鼠右拐,碰到不能走的拐一次,如果还不能走就停下,自己走过的不能走,求相遇的坐标或-1 一个停下之后,另一个还可以走 #include <cstdio> #includ ...
- 深入理解java String 对象的不可变性
下面我们通过一组图表来解释Java字符串的不可变性 1.声明一个String对象 String s = "abcd"; 2.将一个String变量赋值给另一个String变量 St ...
- vb.net中让控件内容为空(Control类)
在平常的敲系统中大家有没有遇到需要让Textbox控件或者其他的控件的显示内容为空,以前直接的做法是直接等于空值,如果此类控件有很多,都需要空值,难道都要设置一下它的值为空嘛,显然这是一个笨办法,有没 ...