EF框架之CodeFirst创建数据库

时间:2022-08-17 21:42:06

         CodeFirstEntity Framework4.1后新增的一种生成模式,在这种方式下,你不需要在DBMS中创建数据库,也无需在VS中画实体模型了,你要做的仅仅是写写代码即可由ORM框架自动创建模型和数据库,非常的方便和简单(由于开发人员只是编写代码,不关心数据库的具体结构,因此也有人把这种方式叫做CodeOnly).

    下面就以一个简单的例子演示一下如何使用CodeFirst生成数据库.

    一.新建一个项目并添加必要的引用.

EF框架之CodeFirst创建数据库

    二.编写代码.

          1在项目中添加两个实体类和一个数据上下文类如下图所示

EF框架之CodeFirst创建数据库

    它们对应的代码如下:

         Customer:

<span style="font-size:18px;">public class Customer
{
[Key ]//标识这是对应数据库表的主键
public int Id { get; set; }

public string CusName { get; set; }

public virtual ICollection<OrderInfo> order { get; set; }
}</span>

         OrderInfo:

<span style="font-size:18px;">public class OrderInfo
{
[Key ]//标识这个属性是数据表中的主键
public int Id { get; set; }

public string Content { get; set; }
/// <summary>
/// 外键约束
/// </summary>
public int CustomerId { get; set; }

public Customer customer { get; set; }
}</span>

          HotelDBContext:

<span style="font-size:18px;">public class HotelDBContext:DbContext 
{
public HotelDBContext()
:base("name=ConnCodeFirst")
{

}
public DbSet<Customer> customer { get; set; }

public DbSet<OrderInfo> orderInfo { get; set; }
}</span>

    然后再配置文件App.config中编写数据库的连接字符串,代码如下:

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings >
<add name ="ConnCodeFirst" connectionString ="server=.;uid=sa;pwd=123456;database=CodeFirstDemoDB" providerName ="System.Data.sqlclient"/>
</connectionStrings>
</configuration></span>

    最后在控制台应用程序的Program类中的主函数中创建数据库,代码如下:

<span style="font-size:18px;"> class Program
{
static void Main(string[] args)
{
//实例化一个数据上下文对象
HotelDBContext dbcontext = new HotelDBContext();
//创建数据库如果不存在的话
if (dbcontext.Database.CreateIfNotExists())
{
Console.WriteLine("数据库已创建成功!");
Console.Read();
}
else {
Console.WriteLine ("数据库已经存在,无需创建!");
}
}
}</span>

    三.运行代码,生成数据库

 EF框架之CodeFirst创建数据库EF框架之CodeFirst创建数据库

    小结一下:CodeFirst相比较而言是一种比较简洁的数据模型生成模式,它很好地支持了以代码为中心的设计理念,代码优先的开发使得开发流程更加的优美,这样你的项目中可以说就不会再需要.edmx那种系统自动生成的DataModel了。