c# - 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 实体框架的基线。 GitHub 上 Cosmos 的实体框架示例
解决方案
我刚刚发现 Azure Cosmos 不支持迁移。您必须调用 context.Database.EnsureCreated() 以确保它已被创建。
推荐阅读
- sql - 我们可以在 PostgreSql 的类型表中添加列吗?
- android - 如何根据 Cloud Firestore 中的日期读取数据
- mysql - 如何为第一个表的空白或空值应用左连接?
- android - 在旧版 Android 上使用 PdfDocument 生成巨大的 PDF 文件
- javascript - 如何为 Gmail 应用程序使用访问令牌?
- flutter - Flutter 中的 RangeError 不超过 Range
- xslt - 删除 '.' 之前的前缀 (点)
- php - laravel 单行动态值
- export - 使用 AnyChart 通过 jpg/png 导出图表图,得到输出的一半
- javascript - 反应 setState 方法不更新状态