简介
Code First的模型最早是从EF 4开始的永存无知模型,它最主要的目的是要让程序员通过程序代码的方式来定义数据结构,没有特别的的GUI工具,并且以FluentAPI的风格来设计API,降低程序员使用API的门坎,因此Code First的API并不难,不过还是要有些数据库的相关概念,否则API再好用也不知道为何而用。
生成模型——空白Code First的做法
与Database First和Model First一样,可以通过添加ADO.NET实体数据模型来生成模型,不过这次选择的是“空白的Code First模型”,如下图:
添加完成后,Visual Studio会打开生成好的Code First程序代码,正如Code First其名,定义的规则全部由程序代码处理,所以这也意味着使用Code First方式进行建模时,可以直接使用类的程序代码,而不需一定要用ADO.NET实体数据模型的方式产生。如下图:
注意:若是使用自己生成类的方式编写Code First模型的话,成了程序结构外,还要记得在App.config或者Web.config中加入EF相关的配置,否则程序没办法顺利访问数据库。
Code First模型生成完成时,向导在App.config中加入了下列设置(注意向导默认会使用SQL Server Express LocalDb作为目标的数据库服务器,如果需要改变的话,先改这里):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="Model1" connectionString="data source=(LocalDb)\v11.0;initial catalog=Code_First.Model1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
修改目的 | 修改方式 |
---|---|
变更数据库类型 | 修改<deafultConnectionFactory>的设置 1.数据库类型为SQL Server(非LocalDb) <defaultConnectionFactory type="System.Data.Infastructure.SqlConnectionFactory,EntityFramework"> <parameters> <parameter value="Data Srouce=MyDatabaseServer;Intergrated Security=True;MultipleActiveResultSets=True" /> </parameters> </defaultConnectionFactory> 2.数据库类型为SQL Server Compact <defaultConnectionFactory type="System.Data.Entity.Infastructure.SqlCeConnectionFactory,EntityFramework"> <parameters> <parameter value="System.Data.SqlServerCe.4.0" /> </parameters> </defaultConnectionFactory> 3.数据库类型为SQL Server Express LocalDb <defaultConnectionFactory type="System.Data.Entity.Infastructure.LocalDbConnectionFactory,EntityFramework"> <parameters> <parameter value="v12.0" /> </parameters> </defaultConnectionFactory> 4.数据库类型为非SQL Server请参照数据库连接软件的文件说明修改<connectionStrings>内的连接字符串 |
变更数据库名称或连接账户 | 修改<connectionStrings>内的连接字符串 1.Code First的连接字符串 <connectionStrings> <add name="BlogContext" providerName="System.Data.SqlClient" connectionString="Server=(local);Database=Blogs;Integrated Security=True;" /> </connectionStrings> 2.Database First/Model First的连接字符串 <connectionStrings> <add name="BlogContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient provider connection string="data source=(localdb)\v11.0;initial catalog=Blogs;integrated security=True;multipleactiveresultsets=True;"" providerName="System.Data.EntityClient" /> </connectionStrings> |
Code First的模型定义是使用程序代码,基本上所有的设置方式都是通过API的调用来进行的,但其实生成出来的程序代码已经可以使用,如下图:
然后在主程序中编写下列程序代码,当它执行完成时就可以看到数据库了,如下图:
生成模型——由数据库生成
若是现有数据库要生成Code First模型,方法也很简单,只要在ADO.NET实体数据模型向导中选择“来自数据库的Code First模型”选项,其他的操作和Database First的模型产生步骤相同。不过,要注意的是,Code First的模型生成曲面没有支持存储过程和函数,所以在选择生成的数据库对象的屏幕显示画面内看不到存储过程和函数,如下图:
未完待续。。。