【发布时间】:2020-07-01 23:29:57
【问题描述】:
我在尝试使用实体框架核心获取 DbContext 对象中的 DbSet 信息时遇到错误。
我的 DbContext 对象是这样的:
public class CatalogueContext : DbContext
{
public DbSet<ConnectorCatalogueItemConv> CatalogueItemConvs { get; set; }
public CatalogueContext(DbContextOptions<CatalogueContext> options)
: base(options)
{
}
public CatalogueContext()
{
}
}
我正在尝试通过调用一个接收泛型类型 T 的方法来实例化上下文,该泛型类型 T 这样可能是 DbContext 的子类:
public T GetContext<T>() where T: DbContext, new()
{
var optionsBuilder = new DbContextOptionsBuilder<T>();
var connectionString = Configuration.GetConnectionString(ExternalTablesKey);
optionsBuilder.UseSqlServer(connectionString);
return Activator.CreateInstance(typeof(T), optionsBuilder.Options) as T;
}
使用 Microsoft.Extensions.Configuration 正确获取了连接字符串,因此问题不存在。
最后,我调用此方法并尝试获取 DbSet 上的任何记录,声明如下:
public void SomeMethod()
{
using (var db = this.GetContext<CatalogueContext>())
{
var val = db.CatalogueItemConvs.ToList(); //Here is where I get the error below.
}
}
显示的错误是:
类型中的方法“ProcessModelFinalized” 'Microsoft.EntityFrameworkCore.Metadata.Conventions.SqlServerValueGenerationStrategyConvention' 从程序集'Microsoft.EntityFrameworkCore.SqlServer, 版本=3.0.0.0,文化=中性,PublicKeyToken=adb9793829ddae60' 没有实现。'
我到处搜索,但似乎关于这个错误的信息很少。有什么想法吗?
编辑 1: 我的解决方案包括版本 3.0.0.0 中的 Microsoft.EntityFrameworkCore.SqlServer
编辑 2: 根据要求,我编辑了代码以仅包含一个实体及其类声明。此时没有映射。
public class ConnectorCatalogueItemConv
{
public string CodConnector { get; set; }
public string CodCatalogue { get; set; }
public string CodItemCia { get; set; }
public string CodItemInbk { get; set; }
public bool Defaultvalue { get; set; }
}
【问题讨论】:
-
请播下实体类和自定义映射代码(如果有的话)。
-
我根据您的请求添加了新的编辑。正如我所说,没有映射。此时,我只想检索 DbSet 上一个表的内容。提前致谢。
-
我想知道为什么 EF 不抱怨
ConnectorCatalogueItemConv没有 key 属性。 -
至少在我标记异常之前 EF 没有抱怨任何事情。在我达到那个点之前似乎还不错。
-
嗯,这一切都表明您没有获得一致的 NuGet 包集合。尝试(重新)安装最新的
Microsoft.EntityFrameworkCore.SqlServer包。
标签: c# asp.net-core entity-framework-core