EF中的code first模式 怎么创建数据库

EF中的code first模式 怎么创建数据库,第1张

方法/步骤

1

EF的Code First模式不需要我们创建什么数据向导,直接写代码就行了。我们用NET最简单的控制台应用程序来说明。如下图所示

2

下面我们新建两个实体,一个实体是班级对象,一个实体是学生对象,注意这两个对象是一对多的关系,他们的构建如下图所示,注意他们声明上面的属性标识

3

然后我们需要引用两个库,一个就是我们的EntityFramework,另一个就是System.Data.Entity

4

下面就是主要写EF的上下文对象了,如下图所示,需要继承EF的DbContext。注意base里的名字为连接字符串名字,在App.Config中配置即可。为了说明CodeFirst的魅力,这里我填写的数据库,在数据库中并没有

5

下面我们在主函数中新增班级对象,然后执行EF的SaveChanges方法

6

看一下我们的数据库吧,你会发现数据库中是不是多出来了一个我们在配置文件中写的数据库名字,并且也已经将表创建好了

7

通过以上的步骤,你感觉到EF的Code First模式的魅力了没,自动创建数据库以及表。这也是现在应用最多的模式了,好了,这次分享就到这里。有什么问题的话,留言咨询即可。

1. 使用CodeFirst方式创建数据库

我们新建一个控制台项目,项目中添加两个Model:Author和Blog以及DbContext。 DbContext的添加方式如下:

项目上右键->添加->新建项->ADO.NET Entity Data Model->Empty Code First model

项目代码如下:

1 //默认生成的数据表名为类名+字母s,这里使用TableAttribute来指定数据表名为T_Authors

2 [Table("T_Authors")]

3 public class Author

4 {

5 public int Id { setget}

6 public string Name { setget}

7 /*

8 此处定义了Blog类型的属性,所以要确保Blog类中至少要有一个表示主键的字段,即public int Id { setget}。

否则在生成数据表时会报错:"EntityType 'Blog' has no key defined. Define the key for this EntityType.

9 Blogs: EntityType: EntitySet 'Blogs' is based on type 'Blog' that has no keys defined."

10 */

11 public virtual ICollection<Blog>Blogs { setget}

12 }

13

14 [Table("T_Blogs")]

15 public class Blog

16 {

17 public int Id { setget}

18 public string Title { setget}

19 public DateTime Time { setget}

20 public int AuthorId { setget}

21 public virtual Author Author { setget}

22 }

23

24 public class MyDbContext: DbContext

25 {

26 public MyDbContext()

27 : base("name=MyDbContext")

28 {

29 }

30 //DbContext会根据配置文件中connectionStrings指定的数据库名称来建立数据库

31 //DbContext根据DbSet属性的类型来创建数据表,这里指定了Author类型的属性,所以会生成T_Authors数据表

32 public virtual DbSet<Author>Authors { setget}

33 }

CodeFirst方式会根据配置文件中的配置生成数据库,这里小编使用的是MYSQL数据库,配置文件如下:

1 <!--EF for MYSQL-->

2  <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">

3 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />

4 <providers>

5 <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />

6 </providers>

7 </entityFramework>

8 <connectionStrings>

9 <add name="MyDbContext" connectionString="server=localhostport=3306database=EFuid=rootpassword=root" providerName="System.Data.MySqlClient" />

10 </connectionStrings>

PS:小编使用的是EF6和MYSQL数据库,所以要在项目中添加对Mysql.Data.Entity.EF6以及EntityFrameword 6.0的引用。

到此,我们已经完成生成数据库的工作,接下来在Main方法中写两行代码:

1 using (var db = new ManagerDb())

2 {

3 db.Authors.Add(new Author() { Name = "xfh" })

4 db.SaveChanges()

5 }

如果你还在为支持xxx上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库找到你的数据库上下文所在的类库(一般都是写在项目中的model中,也有的独立model类库)打开Nuget 程序包管理控制台输入:Enable-Migrations 回车如果正确的话 则显示已为项目 xxx启用 Code First 迁移。我在这里说下 几种有可能出现的错误:1.No context type was found in the assembly xxx在当前项目中 没有找到数据库上下文,也就是DbContext 继承的的 "数据库.cs"2.The EntityFramework package is not installed on project xxx当前项目已经找到了数据上下文,但是没有EntityFrameWork 需要安装输入 install-package entityframework(手大的 不知道对不对)基本就这两个问题,如果安装成功则在项目中 出现Migrations文件夹,里面会记录每次数据迁移所发生的变化。非常好用,不用再删除数据库 重新生成 数据丢失等问题。常用语句 :enable-Migrations -Force 替换迁移数据文件 update-database 更新 add-migration 添加新的更新文件

求采纳为满意回答。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10073888.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存