类库一级项目使用.net core 3.1 框架
其中EFCore是和数据库交互的
MultiCore 注入EFCore中的DBContext与数据库交互
主要为了解决多项目中数据库迁移失败问题
EFCore 工程安装如下包
netcoreapp3.1 enable all runtime; build; native; contentfiles; analyzers; buildtransitive all runtime; build; native; contentfiles; analyzers; buildtransitive
MultiCore 安装如下
netcoreapp3.1
EFCore
person.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace EFCore.Entity
{
public class Person
{
public int id { get; set; }
public int age { get; set; }
public string name { get; set; }
}
}
personconfig.cs
using System;
using System.Collections.Generic;
using System.Text;
using EFCore.Entity;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace EFCore.EntityConfig
{
internal class PersonConfig : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("person");
}
}
}
EFDbcontext.cs
using EFCore.Entity;
using Microsoft.EntityFrameworkCore;
using System;
namespace EFCore
{
public class EFDbContext:DbContext
{
public DbSet people { get; set; }
public EFDbContext(DbContextOptions options)
:base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}
}
}
EFDbContextFac .cs
这是关键,但是这仅仅在开发环境下使用,用户数据库迁移,生产不需要
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore;
namespace EFCore
{
internal class EFDbContextFac : IDesignTimeDbContextFactory
{
public EFDbContext CreateDbContext(string[] args)
{
DbContextOptionsBuilder options = new DbContextOptionsBuilder();
options.UseNpgsql(@"Host=localhost;Database=postgres;Username=postgres;Password=postgres");
EFDbContext eFDbContext = new EFDbContext(options.Options);
return eFDbContext;
}
}
}
此时将efcore设置为启动项就可以完成数据库迁移了(add-migration update-database)
在主工程中注册EFDbcontext即可
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext(options =>
{
options.UseNpgsql(@"Host=localhost;Database=postgres;Username=postgres;Password=postgres");
});
}



