一、项目配置
1、添加类库,Models和Repository,目标框架.net 5.0
2、将WebApp设置为启动项,
3、添加项目之间的引用,
在Repository类库中引用Models类库,在AppWeb应用程序中引用Repository类库(不用引用Models类库也同样能使用Models下的类,因为Repository类库已经引用了Models类库,它们有级联依赖关系)
二、安装Entity Framework Core相关包
1、需要安装的包
a、Microsoft.EntityFrameworkCore.SqlServer
b、Microsoft.EntityFrameworkCore.Tools //Microsoft.EntityFrameworkCore.Tools包中会包含Microsoft.EntityFrameworkCore.Design包
注意事项(安装位置):在Repository类库中通过NuGit安装两个包
2、第一种方式:命令安装
在包管理器控制台 (PMC) 中,输入以下命令来添加 NuGet 包:
//Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore NuGet 包提供 EF Core 错误页的 ASP.NET Core 中间件。 此中间件有助于检测和诊断 EF Core 迁移错误。 Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools
3、第二种:NuGet方式安装
在类库Repository上,右键"管理NuGet程序包"
模糊查找需要添加的程序包:Microsoft.EntityFrameworkCore
安装完成后
三、安装Entity Framework Core相关包
1、创建数据模型
首先,在Model类库中新建ReceivedMoney和InvoiceDetail两个实体类,引用DataAnnotations 命名空间,添加字段特性
常用属性
[Required]
[StringLength(50)]
[Display(Name = "First Name")]
[Column("FirstName")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
2、数据映射
在Repository类库中,建立一个AppDbContext类,这个类需要继承DbContext基类,添加Microsoft.EntityFrameworkCore的引用。AppDBcontext中包括包含了所有逻辑,比如与数据库交互、数据变化追踪等。
public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } }
为让三个Model能在Context中正常工作,将三个Model暴露成DbSet类型
public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<ReceivedMoney> ReceivedMoneys { get; set; } public DbSet<InvoiceDetail> InvoiceDetails { get; set; } public DbSet<InvoiceMoney> InvoiceMoneys { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<ReceivedMoney>().ToTable("ReceivedMoney"); modelBuilder.Entity<InvoiceDetail>().ToTable("InvoiceDetail"); modelBuilder.Entity<InvoiceMoney>().ToTable("InvoiceMoney"); //modelBuilder.Entity<InvoiceDetail>() // .HasKey(i => new {i.InvoiceCode , i.InvoiceNumber }); } }
当数据库创建完成后, EF 创建一系列数据表,表名默认和 DbSet 属性名相同。 集合的属性名通常采用复数形式。 例如,使用 Students,而不使用 Student。
OnModelCreating方法,在 DbContext 中指定单数形式的表名称会覆盖默认行为。
三个Model写好后,还需要将类映射到数据中,也就是映射数据库的三个表,与数据库连接就需要数据库连接字符串
在WebApi应用程序中的appsettings.json文件中添加如下配置:
"ConnectionStrings": { "DefaultConnection": "Server=127.0.0.1;Database=XXX;uid=sa;password=1234" },
在Startup类的ConfigureServices方法下注入数据库上下文依赖
public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; } public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); //services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddDbContext<AppDbContext>(options => options.UseSqlServer("server=127.0.0.1;database=XXX;uid=sa;pwd=1234", b => b.MigrationsAssembly("WebApp"))); }