首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在IEntityTypeConfiguration中确定数据库提供程序,因为我支持多个数据库

如何在IEntityTypeConfiguration中确定数据库提供程序,因为我支持多个数据库
EN

Stack Overflow用户
提问于 2020-12-02 21:44:17
回答 1查看 157关注 0票数 0

有人能告诉我如何在第9行获得当前的数据库提供程序吗?因此,它可以为MySQL迁移正确地生成迁移。我该怎么做才能做到干净。

代码语言:javascript
运行
复制
1 internal class GroupConfiguration : IEntityTypeConfiguration<Group>
2 {
3   public void Configure(EntityTypeBuilder<Group> builder)
4   {
5      builder.ToTable(nameof(Group));
6      builder.HasKey("Id");
7      builder.Property(u => u.Id)
8         .ValueGeneratedOnAdd()
9         .HasDefaultValueSql((database.IsMySql()) ? "uuid()" : "newsequentialid()");
...

我正在使用.NET Core3.1,我的webapp支持多个数据库提供者。目前,MySQL (Pomelo)和Server。我需要它以正确的方式生成迁移。因此,我有一个MySQL和Server迁移。

但是我不想手动更新MySQL生成的迁移。

EN

回答 1

Stack Overflow用户

发布于 2022-01-27 15:08:25

诀窍是将DatabaseFacade传递给您的配置类:

代码语言:javascript
运行
复制
internal class GroupConfiguration : IEntityTypeConfiguration<Group>
{
   private readonly DatabaseFacade _database;

   public GroupConfiguration(DatabaseFacade database)
   {
        _database = database;
   }

   public void Configure(EntityTypeBuilder<Group> builder)
   {
      builder.ToTable(nameof(Group));
      builder.HasKey("Id");
      builder.Property(u => u.Id)
         .ValueGeneratedOnAdd()
         .HasDefaultValueSql((_database.IsMySql()) ? "uuid()" : newsequentialid()");
...

,然后在Database中传递OnModelCreating属性。

代码语言:javascript
运行
复制
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // ...
    modelBuilder.ApplyConfiguration(new GroupConfiguration(Database));
    // ...
}

请记住,配置类不能再由modelBuilder.ApplyConfigurationsFromAssembly()创建,因此您必须使用modelBuilder.ApplyConfiguration()添加配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65116594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档