Entityframework Codefirst模式自动生成数据库方式

Posted 为了暖宝宝的幸福生活而奋斗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Entityframework Codefirst模式自动生成数据库方式相关的知识,希望对你有一定的参考价值。

EF在codefirst模式下能自动生成数据库,那它是如何生成的呢,默认情况下如何生成的呢?先来看看用来生成数据库的DbContext类吧

技术分享
1 protected DbContext();
2         protected DbContext(DbCompiledModel model);
3         public DbContext(string nameOrConnectionString);
4         public DbContext(DbConnection existingConnection, bool contextOwnsConnection);
5         public DbContext(ObjectContext objectContext, bool dbContextOwnsObjectContext);
6         public DbContext(string nameOrConnectionString, DbCompiledModel model);
7         public DbContext(DbConnection existingConnection, DbCompiledModel model, bool contextOwnsConnection);
View Code

可以看到各个构造函数,变量名也挺清楚,一般咱们用第三个构造函数,给其传递连接字符串名,假设为ABC,EF会自动到配置文件里面Connections标签下找name叫ABC的标签,再找到里面所设置的connectionString。根据这个连接字符串连接到数据库管理器生成数据库,如果连接字符串没问题那么数据库就这么Duang~的一下生成了,至于表也会根据model自动生成的,都无需咱们操心。

当然上面是基于你配置了连接字符串且没问题的情况下,那么问题来了,不是挖掘机哪家强,也不是哪家炒菜香,而是如果你没有配置字符串或者你配置了字符串但是你传递的名字不对时EF是怎么处理的呢?

废话不多说,直接调试,我虽然在配置文件里面配置了字符串,但是我故意传递了一个错误的字符串(任性的人生无需解释),下图是提取出来的EF的用于生产数据库的连接字符串,可以看到是用本地默认实例,采用Windows身份验证方式连接的,如果你本地有这个实例且有建库权限,那就根据你传递的字符串作为数据库名建库了。。。。。

技术分享

当然,如果你写的字符串没问题,那就一切OK,EF完全按着你的意思走,读你的连接字符串,以你设置的方式进行数据库验证,以你的设置建库,一切水到渠成~

技术分享

总结:EF还是比较强大的吧,好吃不好吃都接受,但是你给它个砖头那它真没本事吃下去,虽然默认能创建,不过为了避免出错建议还是自己配置连接字符串,因为你部署时能确定目标服务器有本地实例吗?

 

技术分享

 

以上是关于Entityframework Codefirst模式自动生成数据库方式的主要内容,如果未能解决你的问题,请参考以下文章

Entityframework Codefirst模式自动生成数据库方式

EntityFramework CodeFirst 数据库不更新

第三篇:Entity Framework CodeFirst & Model 映射 续篇 EntityFramework Power Tools 工具使用

如何使用 EntityFramework 4.1 CodeFirst 防止十进制值在保存时被截断为 2 位? [复制]

关于类库中EntityFramework之CodeFirst(代码优先)的操作浅析

entityframework学习笔记--005-给code first一个正确的解释