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);

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

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

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

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

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

时间: 2024-10-13 01:39:34

Entityframework Codefirst模式自动生成数据库方式的相关文章

MVC自动生成数据库【Code-FIrst方式】

一般我们写好实体之后,配置好数据上下文对象,还有在配置文件中改好连接字符串之后. 还不能生成数据库,自动生成数据库,有两步关键步骤: 1.   Enable Migrations 2. Update-database 执行玩第二步之后,就自动生成了数据库. ------------------------------------实例---------------------------------------------------------------- //实体: using System

自动生成数据库字典(sql2008) 转自 飘渺の云海

每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 截取一部分图片: 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Carbe> -- Create date: <2014-09-19> -- Description: &

自动生成数据库字典(sql2008)

每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Carbe> -- Create date: <2014-09-19> -- Description: <生成数据库字

完善实体类,由EF自动生成数据库过程中的一些问题

①.配置两表间的关系时WillCascadeOnDelete(false)取消级联删除 public AdminLogConfig() { this.ToTable("T_AdminLogs"); this.Property(a => a.Msg).IsRequired(); this.HasRequired(a => a.AdminUser).WithMany().HasForeignKey(a => a.AdminUserId).WillCascadeOnDele

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.

Hibernate自动生成数据库表

在hibernate.cfg.xml中添加: 引用 <properties> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> value的值可选项如下: 引用 validate  加载hibernate时,验证创建数据库表结构 create  每次加载hibernate,重新创建数据库表结构. create-drop  加载hibern

hibernate+mysql 自动生成数据库问题

Hibernate Entity类 表名注解大写时,在windows下mysql自动生成的表都为小写(不区分大小写),在linux下mysql自动生成区分大小写.导致数据库问题. 原因(window下mysql不区分大小写,hibernate生成时全部生成小写,linux下生成时,按照注解大小写生成) 1 package com.pera.report.designer.data; 2 3 import java.sql.Clob; 4 5 import javax.persistence.Ba

springBoot自动生成数据库表

@Entity @Table(name="t_book") //表名  name 不一定有用 public class Book { @Id    //表的id @GeneratedValue  //自增属性 private Integer id; @Column(length=100) //String 自动对应字符串 private String name; @Column(length=50) private String author; 会根据注释生成对应的表 但是我在生成标的

ASP.NET MVC5利用EF,反向自动生成数据库

1.在Model类里面,写好相应的属性. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Data.Entity; 6 7 namespace MvcMovie.Models 8 { 9 public class Movie 10 { 11 public int ID { get; set; } 12 public string