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);
可以看到各个构造函数,变量名也挺清楚,一般咱们用第三个构造函数,给其传递连接字符串名,假设为ABC,EF会自动到配置文件里面Connections标签下找name叫ABC的标签,再找到里面所设置的connectionString。根据这个连接字符串连接到数据库管理器生成数据库,如果连接字符串没问题那么数据库就这么Duang~的一下生成了,至于表也会根据model自动生成的,都无需咱们操心。
当然上面是基于你配置了连接字符串且没问题的情况下,那么问题来了,不是挖掘机哪家强,也不是哪家炒菜香,而是如果你没有配置字符串或者你配置了字符串但是你传递的名字不对时EF是怎么处理的呢?
废话不多说,直接调试,我虽然在配置文件里面配置了字符串,但是我故意传递了一个错误的字符串(任性的人生无需解释),下图是提取出来的EF的用于生产数据库的连接字符串,可以看到是用本地默认实例,采用Windows身份验证方式连接的,如果你本地有这个实例且有建库权限,那就根据你传递的字符串作为数据库名建库了。。。。。
当然,如果你写的字符串没问题,那就一切OK,EF完全按着你的意思走,读你的连接字符串,以你设置的方式进行数据库验证,以你的设置建库,一切水到渠成~
总结:EF还是比较强大的吧,好吃不好吃都接受,但是你给它个砖头那它真没本事吃下去,虽然默认能创建,不过为了避免出错建议还是自己配置连接字符串,因为你部署时能确定目标服务器有本地实例吗?
时间: 2024-10-13 01:39:34