entity framework codefirst 不能创建数据库表。

entity framework codefirst 不能创建数据库表。,第1张

使用Entity Framework CodeFirst模式创建新数据库

开发环境

Visual Studio 2010 SP1

SQL Server Compact 4.0

演练步骤

打开Visual Studio;

新建Console应用程序Known.EFDemo;

创建Blog模型;

 

public class Blog

{

public int Id { getset}

public string Name { getset}

public List<Post>Posts { getset}

}

public class Post

{

public int Id { getset}

public string Title { getset}

public string Content { getset}

}

右击项目->管理NuGet程序包,搜索Entity Framework并安装;或使用程序包管理器控制台运行命令Install-Package EntityFramework;

创建BlogContext;

public class BlogContext : DbContext

{

public DbSet<Blog>Blogs { getset}

}

修改App.config文件,配置ConnectionString和SQL Server Compact数据提供者工厂;

<connectionStrings>

<add name="BlogContext" connectionString="Data Source=|DataDirectory|Blog.sdf" providerName="System.Data.SqlServerCe.4.0" />

</connectionStrings>

<system.data>

<DbProviderFactories>

<remove invariant="System.Data.SqlServerCe.4.0" />

<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />

</DbProviderFactories>

</system.data>

修改Program并运行,成功后,可以在服务器资源管理器中查看自动生成的表结构及数据。

using (var context = new BlogContext())

{

Console.WriteLine("请输入博客名称:")

var name = Console.ReadLine()

var blog = new Blog { Name = name }

blog.Posts = new List<Post>()

Console.WriteLine("请输入随笔标题:")

var title = Console.ReadLine()

Console.WriteLine("请输入随笔内容:")

var content = Console.ReadLine()

blog.Posts.Add(new Post { Title = title, Content = content })

context.Blogs.Add(blog)

context.SaveChanges()

Console.WriteLine("保存成功!")

}

当模型改变时,可以使用命令自动迁移数据库,配置命令:Enable-Migrations –EnableAutomaticMigrations ;更新命令:Update-Database –Verbose 。

方法/步骤

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 }


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存