Cosmos 的 .NET 5 和 Entity Framework Core (5.0.1) 迁移问题

问题描述

我有一个针对 Azure Cosmos 数据库使用 Entity Framework Core 5.0.1 的控制台应用程序 (.NET 5)。

我的 DbContext 有以下内容:

public class DomainEventStoreContext : DbContext
{
    public DbSet<DomainEventStoreEntry> DomainEventLogs { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder.UseCosmos(
                "https://abc-cosmodb.documents.azure.com:443/","KeyString",databaseName: "DBName");

    protected override void OnModelCreating(ModelBuilder builder)
    {
        // the container name
        builder.HasDefaultContainer("DomainEvents");

        builder.Entity<DomainEventStoreEntry>()
            .ToContainer("DomainEvents");

        builder.Entity<DomainEventStoreEntry>()
            .HasNoDiscriminator();

        builder.Entity<DomainEventStoreEntry>()
            .HasNoKey();

        builder.Entity<DomainEventStoreEntry>()
            .HasPartitionKey(o => o.PartitionKey).Property(e => e.PartitionKey).IsRequired();

        builder.Entity<DomainEventStoreEntry>()
            .Property(e => e.EventId).IsRequired();

        builder.Entity<DomainEventStoreEntry>()
            .Property(e => e.Content).IsRequired();

        builder.Entity<DomainEventStoreEntry>()
            .Property(e => e.CreationTime).IsRequired();

        builder.Entity<DomainEventStoreEntry>()
            .Property(e => e.State).IsRequired();

        builder.Entity<DomainEventStoreEntry>()
            .Property(e => e.EventTypeName).IsRequired();

        builder.Entity<DomainEventStoreEntry>()
            .Property(e => e.TransactionId).IsRequired();

    }
}

我在 Program.cs 中有以下代码:

class Program
{
    static void Main(string[] args)
    {
        var context = new DomainEventStoreContext();
    }
}

当我尝试创建迁移时,出现以下错误:

无法解析“Microsoft.EntityFrameworkCore.Migrations.IMigrator”类型的服务。这通常是因为尚未为此 DbContext 配置数据库提供程序。可以通过覆盖“DbContext.OnConfiguring”方法或在应用程序服务提供者上使用“AddDbContext”来配置提供者。如果使用了“AddDbContext”,还要确保您的 DbContext 类型在其构造函数中接受 DbContextOptions 对象并将其传递给 DbContext 的基本构造函数。”

我在 GitHub 上使用 Microsoft 的 Cosmos 实体框架的基线。 Entity Framework for Cosmos Example on GitHub

解决方法

我刚刚发现 Azure Cosmos 不支持迁移。您必须调用 context.Database.EnsureCreated() 以确保它已被创建。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...