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

Posted

技术标签:

【中文标题】Cosmos 的 .NET 5 和 Entity Framework Core (5.0.1) 迁移问题【英文标题】:.NET 5 and Entity Framework Core (5.0.1) migration issue with Cosmos 【发布时间】:2021-04-07 08:37:05 【问题描述】:

我有一个控制台应用程序 (.NET 5),它使用 Entity Framework Core 5.0.1 来处理 Azure Cosmos 数据库。

我的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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Cosmos 的 .NET 5 和 Entity Framework Core (5.0.1) 迁移问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用代理从 Cosmos SDK .Net 连接到 Azure Cosmos?

在 cosmos db 和 asp.net core 中处理请求时发生未处理的异常

Entity Framework Core 6.0 中的新功能介绍

Entity Framework Core 6.0 中的新功能介绍

Entity Framework Core 6.0 中的新功能介绍

Azure.Cosmos 还是 Microsoft.Azure.Cosmos、Azure.Storage.Blob 还是 Microsoft.Azure.Storage.Blob?适用于 .NET C