导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法。这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多。但是EF给我们提供了一种代码先行的方法,极大程度上的方便了应用。
一、EF的3种工作方式
1.1,Model First
这种EF工作流模式仅仅在实体数据库不存在的情况下使用,使用设计器进行Model 先行开发,开发过程为:
1.在EF设计器里创建model
2.通过model生成实体Database
3.通过model自动生成类classes
1.2,Database First
与Model First刚好相反,是仅在数据库存在的情况下使用,进行数据库的先行开发,过程为:
1.创建数据库
2.在EF设计器里通过已经存在的Database逆向生成工程模型model
3.通过model自动生成类classes
1.3,Code First
这种EF工作流模式既可以在实体数据库本身还不存在下,又可以在实体数据库本身已经存在情况下进行代码的现行开发:
情况一:实体数据库本身还不存在的情况下开发步骤:
1.通过代码编写类以及映射关系,即创建了Model2.通过Model生成实体数据库
3.可以应用自EF4.3以后版本提供的Migration(数据迁移)来使我们的实体数据库开发在代码先行的基础上逐步完善。
情况二:实体数据库本身已经存在下的开发步骤:
1.使用反向数据库工具生成代码类以及映射关系,即Model2.修改Model,可以对Model做一些后期封装
3.同样可以应用Migration进行现行数据库的修改工作,并不影响以前的数据,只要为Migration修改提供默认值即可。
二、Code First实现动态建库
本来是需要我们自己手写类及映射关系,但是EF给我们提供了一种便利:VS——工具——扩展和更新——Entity Framework Power Tools Bata 4。
安装完了之后,在建好的类库上右击——Entity Framework—reverse engineer code first,然后按照提示,一步一步的创建代码。
2.1,需要修改的部分
注意:this.Database.CreateIfNotExists()是调用EF提供的方法,并不是自己创建的。
2.2,使用
<span style="font-family:KaiTi_GB2312;font-size:18px;"> public ActionResult CreateDatabase(string txtName,string txtSex) { Guid guidDatabaseLastNum = Guid.NewGuid(); string strDbName = "TestCrateDatabase" + guidDatabaseLastNum; //连接字符串 string connectionString = "Data Source=*******; User=sa;Password=********;Initial Catalog=" + strDbName + ";Integrated Security=True"; TestCrateDatabaseContext newDb = new TestCrateDatabaseContext(connectionString); return View(); } } }</span>
注意点:1,确保系统中Entity Framework的版本一致,不然会出现很多的问题。
2,注意创建表单中的字段是否含有关键字,当必须包含关键字 的时候,一定要人为的进行处理。
三、总结
其实,自己什么都没有做。而且这种实现,真的是超级简单,但是,之前自己为什么一直都不会,还很恐惧。。。我想这次是真的验证了不怕不知道,就怕不知道的名言了。本身EF是给我们提供这种便利的,但是由于自身的知识不足,都不知道有这些东西,所以才是一直都做不出来。