博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework 6源码学习--设置调试EF环境
阅读量:4588 次
发布时间:2019-06-09

本文共 3209 字,大约阅读时间需要 10 分钟。

下载源代码

打开下载源代码。

 

建立调试解决方案

建立一个EntityFramework.Sample.sln在EntityFramework6根目录,建一个Console工程在src目录下,再将EF源代码文件夹中的EntityFramework和EntityFramework.SqlServer加入到解决方案中。如下图所示:

 

删除延迟签名

打开EntityFramework、EntityFramework.SqlServer项目属性页,发现签名页签下面的”Delay sign only“被勾上,这样生成的程序集项目无法进行调试,将Sign the assembly取消勾选。如下图所示:

添加项目引用

在EntityFramework.Sample中添加对EntityFramework、EntityFramework.SqlServer这两个项目的引用。如下图所示:

 

建立测试数据库

打开Microsoft SQL Server Management Studio,创建DB,名字为EFDB,然后选中新创建DB点击菜单栏New Query。

USE [EFDB]GO/****** Object:  Table [dbo].[UserInfos]    Script Date: 6/15/2018 1:18:35 PM ******/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

编写测试代码

在EntityFramework.Sample项目中修改Program.cs, 添加EFDBContext.cs和User.cs文件。

Program.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EntityFramework.Sample{    class Program    {        static void Main(string[] args)        {            using (var context = new EFDBContext("Server=10.1.55.166;Database=EFDB;Password=1qaz2wsxE;User ID=sa"))            {                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(); } } }}

User.cs

using System.ComponentModel.DataAnnotations.Schema;namespace EntityFramework.Sample{    [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; }    }}

EFDBContext.cs

using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EntityFramework.Sample{    public class EFDBContext : DbContext    {        public EFDBContext(string connectionString)            : base(connectionString)        {        }        public IDbSet
Users { get; set; } }}

开始调试

重新生成成功后,开始运行调试,成功进入EntityFramework源代码断点。 但是在运行时加载EntityFramework.SqlServer程序集失败,虽然上面去掉强签名,但是加载的时候仍然存在强签名,最后Debug跟踪,发现源码中默认没有给Provider会默认加载EntityFramework.SqlServer,并且是带有强签名的,只需要把这里的强签名去掉即可,如下图所示:

 

 

总结

设置调试环境,对于理解EntityFramework工作原理和学习源代码尤其重要,但这不是目的,深入了解其代码执行才是目标。

转载于:https://www.cnblogs.com/zhesong/p/EF6Debug.html

你可能感兴趣的文章
CCActionPageTurn3D
查看>>
python random
查看>>
esp32-智能语音-cli(调试交互命令)
查看>>
netty与MQ使用心得
查看>>
格式化输入1.%s占位输入法
查看>>
WinForm中的ListBox组件编程
查看>>
matplotlib柱状图
查看>>
jfinal初接触,一个简单的文件上传例子
查看>>
背景音乐的实现
查看>>
灵玖软件:NLPIR大数据提供智能挖掘技术方案
查看>>
Selenium常用API的使用java语言之3-selenium3 浏览器驱动
查看>>
linux一些好用的命令
查看>>
实验 杨辉三角
查看>>
模型保存与恢复、自定义命令行参数
查看>>
tensorflow框架学习(一)——四个基础元素graph、session、tensor、op
查看>>
mySql分组排序
查看>>
I-think-3
查看>>
mybatis中封装结果集常见示例
查看>>
FREESWITCH 填坑指南
查看>>
ASP Err.Number 对应的Description
查看>>