将类库项目从.netcore2.2迁移到.netcore 3.1时,出现以下错误:
错误CS1061'IMutableEntityType'不包含'Cosmos'的定义,并且找不到可访问的扩展方法'Cosmos'接受类型为'IMutableEntityType'的第一个参数(您是否缺少using指令或程序集引用?)
在 .netcore2.2 项目中,我使用了以下nuget软件包:
现在,作为迁移过程的一部分,我已将上述所有nuget软件包更新为最新版本。
她去了我的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;
任何人都可以通过提供指导来帮助我解决此问题
答案 0 :(得分:1)
在EF Core 3.0+提供程序扩展中,如Cosmos()
,SqlServer()
等以及Relational()
已被删除。现在,它们被提供为相应元数据接口的直接扩展方法,所有先前的属性都被Get
/ Set
扩展方法所取代。
在您的情况下,Cosmos().ContainerName
属性的替换是GetContainer和SetContainer扩展方法:
metadata.SetContainer(dbSet.Name);