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

时间:2019-12-23 20:53:41

标签: c# entity-framework-core ef-core-3.1

将类库项目从.netcore2.2迁移到.netcore 3.1时,出现以下错误:

  

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

.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 个答案:

答案 0 :(得分:1)

在EF Core 3.0+提供程序扩展中,如Cosmos()SqlServer()等以及Relational()已被删除。现在,它们被提供为相应元数据接口的直接扩展方法,所有先前的属性都被Get / Set扩展方法所取代。

在您的情况下,Cosmos().ContainerName属性的替换是GetContainerSetContainer扩展方法:

metadata.SetContainer(dbSet.Name);