'IMutableEntityType' 不包含 'Cosmos' 的定义并且没有可访问的扩展方法 'Cosmos' 接受第一个参数
'IMutableEntityType' does not contain a definition for 'Cosmos' and no accessible extension method 'Cosmos' accepting a first argument
将 class 库项目从 .netcore2.2 迁移到 .netcore 3.1 时,出现以下错误:
Error CS1061 'IMutableEntityType' does not contain a definition for 'Cosmos' and no accessible extension method 'Cosmos' accepting a first argument of type 'IMutableEntityType' could be found (are you missing a using directive or an assembly reference?)
在 .netcore2.2 项目中,我使用了以下 nuget 包:
- AutoMapper.Extensions.Microsoft.DependencyInjection
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.宇宙
- Microsoft.Extensions.Configuration
现在,作为迁移过程的一部分,我已将上述所有 nuget 包更新到最新版本。
她去我的 DbContext class:
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;
谁能提供指导帮助我解决这个问题
在 EF Core 3.0+ 中,Cosmos()
、SqlServer()
等提供程序扩展方法以及 Relational()
已被删除。现在它们作为相应元数据接口的直接扩展方法提供,所有以前的属性都替换为 Get
/ Set
扩展方法。
在您的情况下,Cosmos().ContainerName
属性 的替换是 GetContainer and SetContainer 扩展方法:
metadata.SetContainer(dbSet.Name);
将 class 库项目从 .netcore2.2 迁移到 .netcore 3.1 时,出现以下错误:
Error CS1061 'IMutableEntityType' does not contain a definition for 'Cosmos' and no accessible extension method 'Cosmos' accepting a first argument of type 'IMutableEntityType' could be found (are you missing a using directive or an assembly reference?)
在 .netcore2.2 项目中,我使用了以下 nuget 包:
- AutoMapper.Extensions.Microsoft.DependencyInjection
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.宇宙
- Microsoft.Extensions.Configuration
现在,作为迁移过程的一部分,我已将上述所有 nuget 包更新到最新版本。
她去我的 DbContext class:
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;
谁能提供指导帮助我解决这个问题
在 EF Core 3.0+ 中,Cosmos()
、SqlServer()
等提供程序扩展方法以及 Relational()
已被删除。现在它们作为相应元数据接口的直接扩展方法提供,所有以前的属性都替换为 Get
/ Set
扩展方法。
在您的情况下,Cosmos().ContainerName
属性 的替换是 GetContainer and SetContainer 扩展方法:
metadata.SetContainer(dbSet.Name);