"IMutableEntityType"不包含"Cosmos"的定义,也没有可访问的扩展方法"Cosmos"接受第一个参数。

6
在将一个类库项目从.netcore2.2迁移到.netcore3.1时,我遇到了以下错误:

错误 CS1061:“IMutableEntityType”不包含“Cosmos”的定义,并且找不到可接受类型为“IMutableEntityType”的第一个参数的访问扩展方法“Cosmos”(是否缺少使用指令或程序集引用?)

在.netcore2.2项目中,我使用了以下NuGet包:
  1. AutoMapper.Extensions.Microsoft.DependencyInjection
  2. Microsoft.EntityFrameworkCore
  3. Microsoft.EntityFrameworkCore.Cosmos
  4. Microsoft.Extensions.Configuration

现在,在迁移过程中,我已经将上述所有NuGet包更新为它们的最新版本。

enter image description here

这是我的 DbContext 类:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options): base(options)
    {
    }

    protected MyDbContext()
    {
    }

    public DbSet<Address> Address { get; set;}

    public DbSet<Languages> Languages { get; set;}

    public DbSet<Contacts> Contacts { get; set;}


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        OneCollectionPerDbSet(modelBuilder);
    }

    private void OneCollectionPerDbSet(ModelBuilder modelBuilder)
    {
        var dbSets = typeof(MyDbContext).GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(p => p.PropertyType.IsGenericType && typeof(DbSet<>).IsAssignableFrom(p.PropertyType.GetGenericTypeDefinition()));
        foreach (var dbSet in dbSets)
        {
            var metadata = modelBuilder.Entity(dbSet.PropertyType.GetGenericArguments()[0]).Metadata;
            metadata.Cosmos().ContainerName = dbSet.Name;
        }
    }
}

在上面的代码中,我在方法OneCollectionPerDbSet中遇到了错误,如下所示:
metadata.Cosmos().ContainerName = dbSet.Name;

有人能提供指导帮助我解决这个问题吗?

1个回答

9
在EF Core 3.0+中,提供程序扩展方法如, 等以及已被删除。现在它们作为相应元数据接口的直接扩展方法提供,并使用所有先前属性由 / 扩展方法替换。
在您的情况下,属性的替换是和扩展方法:GetContainerSetContainer扩展方法。
metadata.SetContainer(dbSet.Name);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接