类库一级项目使用.net core 3.1 框架
其中EFCore是和数据库交互的
MultiCore 注入EFCore中的DBContext与数据库交互
主要为了解决多项目中数据库迁移失败问题
EFCore 工程安装如下包
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.10" />
</ItemGroup>
</Project>
MultiCore 安装如下
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.10" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EFCore\EFCore.csproj" />
</ItemGroup>
</Project>
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<Person>
{
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.ToTable("person");
}
}
}
EFDbcontext.cs
using EFCore.Entity;
using Microsoft.EntityFrameworkCore;
using System;
namespace EFCore
{
public class EFDbContext:DbContext
{
public DbSet<Person> people { get; set; }
public EFDbContext(DbContextOptions<EFDbContext> 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<EFDbContext>
{
public EFDbContext CreateDbContext(string[] args)
{
DbContextOptionsBuilder<EFDbContext> options = new DbContextOptionsBuilder<EFDbContext>();
options.UseNpgsql(@"Host=localhost;Database=postgres;Username=postgres;Password=postgres");
EFDbContext eFDbContext = new EFDbContext(options.Options);
return eFDbContext;
}
}
}
此时将efcore设置为启动项就可以完成数据库迁移了(add-migration update-database)文章来源:https://www.toymoban.com/news/detail-468979.html
在主工程中注册EFDbcontext即可文章来源地址https://www.toymoban.com/news/detail-468979.html
// 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<EFDbContext>(options =>
{
options.UseNpgsql(@"Host=localhost;Database=postgres;Username=postgres;Password=postgres");
});
}
到了这里,关于.net core 多项目中使用EFCore的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!