Entity Framework如何使用Code First模式连接已经存在的数据库

最近有个项目需要反编译别人的程序,在还原的过程中,对方使用了Entity Framework的Code First模式来连接访问数据库(数据库已存在)。

在使用过程中,我自己先创建了一个继承自DbContext的类BlogContext,其中有个属性HIP_RegistryInfo,类型为DbSet,是我想要读取的表的集合。可是当我执行代码

1
2
3
4
using(BlogContext context = new BlogContext())
{
HIP_RegistryInfo regInfo = context.HIP_RegistryInfo.FirstOrDefault<HIP_RegistryInfo>();
}

程序就会报错,未将对象引用设置到对象实例,这到底是为什么呢?

为了搞清楚原因,我决定不再使用自己创建的BlogContext类。我打算用Visual Studio自带的ADO.NET实体数据模型来创建BlogContext类。根据官网的说法,有一个来自数据库的Code First的选项,可是我找了半天也没找到。好不容易在网上搜到了我想要的答案,原来我使用的Visual Studio 2013,有一个Entity Framework 6.1.3 Tools for Visual Studio 2013 Setup Wizard包安装了之后,才会有来自数据库的Code First的选项。

安装完成之后,选择来自数据库的Code First生成BlogContext类。再次运行刚才的那段代码,还是报相同的错,我就纳闷了,究竟哪里还有问题?

后来我在BlogContext类的OnModelCreating方法里,打了个断点,想调试进去看看执行了没有,结果刚才那段报错的代码竟然运行通过了。我也是醉了。我猜想,可能是Visual Studio自身的问题,对于创建的BlogContext类还没调整过来,仍然在运行之前我自己创建的BlogContext类。这种情况也不是第一次出现了,之前有过一次用static修饰的变量竟然没有执行,后来打了个断点想要去调试,结果竟然又恢复正常了。

总结下来,其实用ADO.NET实体数据模型来创建BlogContext类,从而访问数据库里的表,这种方式并没有错,而且这种方式出错的几率最小,如果不是很擅长写Code First模型的人,推荐使用该方法,前提是需要安装Entity Framework 6.1.3 Tools for Visual Studio 2013 Setup Wizard(EF以及Visual Studio的版本取决于你的电脑安装了哪些个版本)

avatar

chilihotpot

You Are The JavaScript In My HTML