Entity Framework 6源码学习(一)
来源:互联网 发布:淘宝天猫8折代购原理 编辑:程序博客网 时间:2024/05/16 10:06
设置调试EF环境
下载源代码
打开https://github.com/aspnet/EntityFramework6下载源代码,建议使用Git进行Clone。
重新生成EntityFramework程序集
打开源代码文件夹里的EntityFramework.sln解决方案,尝试编译,发现有错误无法编译通过,发现因为System.Data.SqlServerCe.dll程序集无法找到,需要安装.NET Compact Framework 3.5 Redistributable,再次编译成功。
建立调试解决方案
建立空白解决方案,添加一个Console应用程序EFSample,再将EF源代码文件夹中的EntityFramework和EntityFramework.SqlServer加入到解决方案中,如下图:
删除延迟签名
打开EntityFramework项目属性页,发现签名页签下面的”仅延迟签名“被勾上,这样生成的程序集项目无法进行调试,将此选项取消。
取消后编译发现程序集无法生成,出现错误。
我猜测这是由于EcmaPublicKey.snk文件中只有公钥,没有私钥,无法完成签名(虽然没有找到确切说法,但是多半如此,因为延迟签名正是为了防止私钥泄露),因此可以选择创建一个自己的密钥文件,或者取消”为程序集签名”选项。
添加项目引用
在EFSample中添加对这两个项目的引用
建立测试数据库
本机SQLServer中建立MonitorDB数据库,创建表UserInfos。表创建文件为
CreateUserInfos.sql
USE [MonitorDB]GO/****** Object: Table [dbo].[UserInfos] Script Date: 2016/8/12 21:19:20 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[UserInfos]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [Email] [nvarchar](max) NULL, [QQ] [nvarchar](max) NULL, [Position] [nvarchar](max) NOT NULL, [FirstLevel] [nvarchar](max) NOT NULL, [SecondLevel] [nvarchar](max) NOT NULL, [Mobile] [nvarchar](max) NULL, CONSTRAINT [PK_UserInfos] PRIMARY KEY CLUSTERED ( [Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GO
创建完成后,在表中填充测试数据。
编写测试代码
在EFSample项目中修改Program.cs, 添加MonitorDB.cs和User.cs文件。
Program.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.Entity;namespace EFSample{ class Program { static void Main(string[] args) { using (var context = new MonitorDBContext("Server=.;Database=MonitorDB;Trusted_Connection=True;")) { var users = context.Users.ToList(); Console.WriteLine("{0,6} {1,5} {2,20}", "ID", "Name", "Email"); foreach (var user in users) { Console.WriteLine("{0,6} {1,5} {2,20}", user.Id, user.Name, user.Email); } Console.ReadKey(); } } }}
MonitorDBContext.cs
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations.Schema;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFSample{ public class MonitorDBContext : DbContext { public MonitorDBContext(string connectionString) : base(connectionString) { } public IDbSet<User> Users { get; set; } }}
User.cs
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations.Schema;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFSample{ [Table("UserInfos")] public partial class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public string QQ { get; set; } public string Position { get; set; } public string FirstLevel { get; set; } public string SecondLevel { get; set; } public string Mobile { get; set; } }}
开始调试
重新生成成功后,开始运行调试,成功进入EntityFramework源代码断点。
总结
设置调试环境,对于理解EntityFramework工作原理和学习源代码尤其重要,但这不是目的,深入了解其代码执行才是目标。
- Entity Framework 6源码学习(一)
- Entity Framework 学习笔记(一)
- Entity Framework学习(一)CodeFirst入门
- Entity Framework 了解(一)
- Entity Framework(一)基础
- Entity Framework 4.1 Code First 学习之路(一)
- entity framework源码调试
- Entity Framework Code First (一)Conventions
- Entity FrameWork 一
- Entity Framework 学习初级篇6--EntityClient(转)
- Entity Framework 学习初级篇6--EntityClient
- Entity Framework 学习初级篇6--EntityClient
- Entity Framework学习初级篇6--EntityClient
- ADO.NET Entity Framework 学习(1)
- ADO.NET Entity Framework 学习(2)
- Entity Framework学习笔记(初学)
- Entity Framework 学习总结
- Entity Framework 学习
- pendingIntent详解
- json的使用
- 【webpack】expose-loader 插件使用
- POJ 2299 Ultra-QuickSort
- 华为oj 删除字符串中出现次数最少的字符
- Entity Framework 6源码学习(一)
- 主人公惺惺著
- OC中data与date
- jQuery datatable 多个查询条件
- 面向对象
- 一个计时器
- iPhone, iPad分辨率
- LintCode排序题总结
- Java导出Excel表,POI 实现合并单元格以及列自适应宽度