net-EF codefirst 怎么在创建数据库时增加初始数据

net-EF codefirst 怎么在创建数据库时增加初始数据,第1张

1 使用CodeFirst方式创建数据库

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

项目上右键->添加->新建项->ADONET 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 { set; get; }

6 public string Name { set; get; }

7 /

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

否则在生成数据表时会报错:"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 { set; get; }

12 }

13

14 [Table("T_Blogs")]

15 public class Blog

16 {

17 public int Id { set; get; }

18 public string Title { set; get; }

19 public DateTime Time { set; get; }

20 public int AuthorId { set; get; }

21 public virtual Author Author { set; get; }

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 { set; get; }

33 }

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

1 <!--EF for MYSQL-->

2<entityFramework codeConfigurationType="MySqlDataEntityMySqlEFConfiguration, MySqlDataEntityEF6">

3 <defaultConnectionFactory type="SystemDataEntityInfrastructureSqlConnectionFactory, EntityFramework" />

4 <providers>

5 <provider invariantName="MySqlDataMySqlClient" type="MySqlDataMySqlClientMySqlProviderServices, MySqlDataEntityEF6" />

6 </providers>

7 </entityFramework>

8 <connectionStrings>

9 <add name="MyDbContext" connectionString="server=localhost;port=3306;database=EF;uid=root;password=root" providerName="SystemDataMySqlClient" />

10 </connectionStrings>

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

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

1 using (var db = new ManagerDb())

2 {

3 dbAuthorsAdd(new Author() { Name = "xfh" });

4 dbSaveChanges();

5 }

ef的codefirst是个好东西,让我们完全不用考虑数据库端(注意,这里并不是说不需要对数据库知识进行了解),一切工作都可以通过代码来完成。ef是orm,已经把数据访问 *** 作封装得很好了,可以直接在业务层中使用,那我们为什么还要对其进行那么多封装呢?在我看来,封装至少能带来如下的好处:

把ef的相关对象封装在数据访问层中,解除了业务层对ef的依赖。

统一ef的数据 *** 作,以保证业务层使用相同的代码规范

隐藏ef的敏感配置,降低ef的使用难度

这里就引入一个问题,应该怎样来进行ef的封装呢,既要保证使用的统一与方便性,又要保持ef的灵便性,否则,封装将变成给业务层设置障碍。下面,主要针对数据查询进对可能出现的误用情况进行分析。

肯定能保住的。 我们是这样的做的,先在表里添上字段,然后用 EF Power Tools 根据数据库生成对应的poco类。这样 就不会重新生成数据库了。 用 codefirst 据我所知 都是用ef power tools 来生成poco类的。因为一般开发人员都是习惯于先设计数据库。希望我的回答能给你带来帮助。

EF Code-Frist本身就是支持事务的。

我们的每一次SaveChanges就是一个事务 *** 作,只需要在所有更改都完成后,调用这个方法就可以了。

如果你不愿意,网上还有人给出了手动的开启事务的代码(我没有测试过):

DbConnection con = ((IObjectContextAdapter)ctx)ObjectContextConnection;

conOpen();

using (var tran = conBeginTransaction())

{

// 这里才是事务中的代码

tranCommit();

}

conClose();

以上都是针对一个DbContext,也就是一个数据库的时候,如果 *** 作涉及到多个数据库,还是使用分布式事务 *** 作比较靠谱。

原文链接:>

这里我们选择 ASPNET Core Web Application (NET Core)

这里选择web 应用程序,然后更改身份验证 改为 不进行身份验证

然后再包管理控制台里执行下面两条命令

引用 EntityFrameworkCore

Install-Package MicrosoftEntityFrameworkCore

再引用 EntityFrameworkCoreSqlServer

Install-Package MicrosoftEntityFrameworkCoreSqlServer

创建实体

我们在项目添加一个 Models 文件夹。

新建一个Usercs

public class User

{

public int Id { get; set; }

public string UserName { get; set; }

public string Password { get; set; }

}

这里我为了方便,继续新建 DataContextcs

public class DataContext : DbContext

{

public DataContext(DbContextOptions<DataContext> options)

: base(options)

{

}

public DbSet<User> Users { get; set; }

}

创建数据库

打开 Startupcs 在 ConfigureServices 下添加如下代码:

public void ConfigureServices(IServiceCollection services)

{

//这里就是填写数据库的链接字符串

var connection = "Data Source=;Initial Catalog=EFCore;User ID=sa;Password=sa123";

servicesAddDbContext<DataContext>(options => optionsUseSqlite(connection));

// Add framework services

servicesAddMvc();

}

你好:

EF可以支持多数据库的,比如sql server, mysql , oracle,它可以做到迁移数据库,可以几乎不改代码,但是,edmx其实是一个配置文件,也包含了目标数据库的信息。

如果要做到更改配置就可以切换数据库,那么,有以下几点:

1:3种数据库的provider的文档要仔细看,确认哪些功能是不被支持的,取支持功能的最小集,写进开发规范,规定哪些linq语句不允许写。

2:为3种数据库准备3套edmx,这样比较简单,也可以把ssld之类生成在dll之外,然后动态修改,但容易出错且麻烦。不论是dbfirset还是codefirst,根据目标数据库类型重新生成edmx都比较简单。

3:更改连接串,EF的连接串中,需要指定传统连接串/EF的provider/相应的edmx配置(ssld,csdl,msl),把这3个要素都根据1,2配置为你的目标数据库对应的配置之后,理论上,你的代码就可以直接运行。

先分别介绍一下三种方法的联系:

1Database First是基于已存在的数据库,利用某些工具(如VS提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。也就是从一个数据库开始,然后生成实体框架和相应代码。

2Model First 是先利用某些工具(如VS的EF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。

3Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。

下面分析这三种方式的优缺点:

Database-First模式明显性能会差点,但是它很适合初学者,或者是比较急的小型项目。还有一点,我们在做项目时可能不容易体会到它的好处,但如果做数据库结构比较成熟稳定的产品时,我们可以很轻松的使用数据库生成实体模型,从而实现快速开发。

Model-First模式优点是开发人员能够在模型设计完成后,可以利用VS等工具快速生成数据库脚本。缺点是设计模型时完全了解数据库的结构,在模型中手动添加表关系,并且生成的脚本有点不简洁。

Code-First模式优点是性能比较好,且代码较少冗余。不过它的缺点也有很多,由于都是代码编写的,比如更新数据库。

这三种方式各有利弊,使用过程中我们要按实际需求来选择。这些工具的出现和使用,大大提高了开发人员的开发速度,使得数据库、模型等出现了复用、扩展的可能,在应对变化方面也做了足够的工作。这些工具所体现的服务思想更提醒我们要全方位去考虑问题,在产品中做好应对变化的措施。

以上就是关于net-EF codefirst 怎么在创建数据库时增加初始数据全部的内容,包括:net-EF codefirst 怎么在创建数据库时增加初始数据、ef code first 怎样指定哪些类生成数据表那些不生成数据表、MVC3 codefirst 与 Databasefirst等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/9488211.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存