一、什么是dbfirst?
Dbfirst是一种开发模式,是指先搭建数据库,然后通过ORM(对象关系映射)工具来生成代码和数据模型。它相对于codefirst和model first而言,是一种更为传统的开发方式,在多数情况下,选择dbfirst开发模式可以带来更多的好处。
二、为什么选择dbfirst?
1、更加方便的数据库管理
public class DatabaseContext : DbContext
{
public DatabaseContext() : base("DbFirstConnection") { }
public virtual DbSet Users { get; set; }
}
对于一个拥有多张表的数据库,通过dbfirst方式,我们只需要维护一个大的数据模型,来确保代码的简洁性,而对于codefirst和model first方式,我们则需要在每一个实体上进行大量的注解,来维护数据模型,这会使得我们的代码变得苍白而不简洁。
2、更加方便的数据库更新
Add-Migration DbFirstMigration
Update-Database
在数据库更新的过程中,使用dbfirst方式同样可以带来更多的好处。我们可以直接在数据库中更新、添加或删除表,最后再通过ORM工具生成对应的数据模型,来确保数据库更新的效率和准确性。
3、更加方便的团队协作
在一个大型项目中,我们通常都需要多人协作,而dbfirst方式可以帮助我们快速生成数据模型,避免在数据模型上的重复工作。同时,在多人协作中,如果我们使用codefirst或model first方式来进行开发,在多人协作时管理起来则较为困难。
三、如何使用dbfirst?
1、使用VS中的“Entity Framework Designer”工具(只适用于EF6)
我们可以通过VS中的“Entity Framework Designer”工具来进行dbfirst开发。
var dbContext = new DatabaseContext();
var users = dbContext.Users.ToList();
2、使用Scaffold-DbContext命令(EF Core)
在EF Core中,我们可以使用Scaffold-DbContext命令来生成数据模型。
Scaffold-DbContext 'Data Source=.;Initial Catalog=DbFirstExample;Integrated Security=true;' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
3、使用Database First生成器(EF Core设计器)
我们也可以使用EF Core设计器的Database First生成器来进行dbfirst方式的开发。
代码示例:
public class DatabaseContext : DbContext
{
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options) { }
public virtual DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(e => e.Id);
entity.ToTable("dbo.Users");
entity.Property(e => e.Id).HasColumnName("Id").ValueGeneratedOnAdd();
entity.Property(e => e.Name)
.HasColumnName("Name")
.HasMaxLength(50)
.IsUnicode(false);
});
}
}
四、如何避免常见的dbfirst错误?
1、避免在直接在数据库中进行修改。
如果我们直接在数据库中进行表结构的修改,将会导致ORM工具失效,从而导致程序无法正常运行。
2、避免手动编辑自动生成的代码。
在执行Scaffold-DbContext或使用设计器生成数据模型后,我们通常都会自动生成相应的实体、数据上下文等代码。在这种情况下,我们应该避免手动修改这些自动生成的代码。
3、避免过度依赖ORM工具。
虽然ORM工具可以带来很多好处,但是在开发中我们还是应该明确自己需要什么,并谨慎地使用ORM工具。过度的依赖ORM工具,可能会导致整个项目过于臃肿、维护成本过高。
原创文章,作者:NKRAD,如若转载,请注明出处:https://www.506064.com/n/318003.html