当前位置: 首页 > 知识库问答 >
问题:

类项目中的DbContext问题

史阳晖
2023-03-14

背景:

我在同一个解决方案中有一个Web API项目和一个类库项目,它们共享相同的模型类。两个项目共享同一个数据库,并且都使用DbContext来读/写数据。

Web API项目以典型的UnitOfWork模式设置,工作正常。

这个班级项目有点不同。我在构造函数中指定连接字符串,而不是在Web中指定。配置文件:

class MyContext : DbContext
{
    public MyContext(string connectionString)
        : base()
    {
        // Do this to force me to use eager loading
        this.Configuration.LazyLoadingEnabled = false;
        // Init connection string
        this.Database.Connection.ConnectionString = connectionString;
        Database.SetInitializer <CFCalcContext> (null);
    }


    ... DbSets ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ... modelBuilder details ...
    }
}

我使用WebAPIhtml" target="_blank">调用类库中定义的函数。当我试图使用类库查询数据库时,我得到一个错误。

问题是:

在类库项目中,我得到了一个具有内部异常的实体命令编译异常:

异常:System.数据。映射片段从第82、90行开始出现问题:两个具有不同键的实体被映射到同一行。确保这两个映射片段不会将具有不同键的两组实体映射到同一组行。

(82,10):错误3034:映射从第82、98行开始的片段时出现问题:具有不同键的两个实体映射到同一行。确保这两个映射片段不会将具有不同键的两组实体映射到同一组行。

(82,10):错误3034:从第82,106行开始的映射片段中的问题:具有不同主键的两行被映射到同一实体。确保这两个映射片段不会将具有相同键的两组实体映射到两组重叠的行。

(82,10):错误3034:映射从第82、112行开始的片段时出现问题:具有不同键的两个实体映射到同一行。确保这两个映射片段不会将具有不同键的两组实体映射到两个重叠的行组。

(82,10):错误3034:映射从第82、118行开始的片段时出现问题:具有不同键的两个实体映射到同一行。确保这两个映射片段不会将具有不同键的两组实体映射到两个重叠的行组。

(90,10):错误3034:从第90,98行开始的映射片段中的问题:具有不同键的两个实体被映射到同一行。确保这两个映射片段不会将具有不同键的两组实体映射到同一组行。

此外,当我右键单击派生的DbContext类(在类库中)并使用Entity Framework Power Tools“查看实体数据模型”时,我得到一个错误:“在所选文件中找不到从DbContext派生的可构造类型。”这在WebAPI项目中工作得很好。

为什么连接到同一数据库且配置基本相同的两个DBContext会执行不同的操作?我必须错过一个配置步骤,但我不知道是哪个步骤。

谢谢你的帮助!

共有1个答案

包德业
2023-03-14

这里发生了很多事情。首先,如果手动设置连接字符串,则应在调用基本构造函数时进行设置:

public MyContext(string connectionString)
    : base(connectionString)

第二,你们真的应该把它放到网上。配置-如果名称是问题所在,您可以给它一个不同的名称,如:

public MyContext()
    : base("Whatever name I used in Web.Config")

第三,这可能是错误的:

Database.SetInitializer <CFCalcContext> (null);

数据库的留档。设置初始化器状态:

获取或设置数据库初始化策略。当从DbCompiledModel初始化DbContext实例时,将调用数据库初始化策略。

换句话说,将其设置为null很可能会使DbContext在尝试执行任何操作时立即爆炸—我怀疑这就是发生在您身上的情况。

 类似资料:
  • 我有一个WebApi,它使用EFCore2.0和2个客户端试图同时访问一个操作方法...一个客户端一切正常。但是当2个或更多尝试同时访问一个特定的操作方法时,我在Microsoft.EntityFrameworkCore得到了这个错误: 在前一个操作完成之前,在此上下文上开始了第二个操作。任何实例成员都不能保证是线程安全的 我使用 DI 和存储库进行网络Api。我定义了IUnitOfWork的范围

  • 我被分配去完成一个项目,作为我求职申请的一部分。公司派我来安装的要求如下: OpenJDK 1.8 Maven 3.x Git 2.x MySQL 5.x. 我试图从服务器端(Java)运行应用程序,它抛出了这个异常(可能是依赖关系问题,但我找不到): 2020-08-30 07:34:56.850错误org.springframework.boot.springapplication:858-应

  • 使用此文档了解关于 After Effects 中项目类型的信息。 关于项目 After Effects 项目是一个文件,用于存储合成以及该项目中素材项目所使用的全部源文件的引用。合成是图层的集合。许多图层使用素材项目(例如影片或静止图像)作为源,但某些图层(例如形状图层和文本图层)包含您在 After Effects 中创建的图形。 项目文件使用文件扩展名 .aep 或 .aepx。使用 .ae

  • 我看了看样品,然后跟着它走 (渐变版本为6.8.3) https://docs.gradle.org/6.8.3/samples/sample_building_java_applications_multi_project.html 我只是附加了插件io。Spring演示中的依赖关系管理。java常见约定。gradle文件。 然后运行gradle生成,出现以下错误。 错误:插件请求无效[id:“

  • 我试图建立我的项目,但我不能。 致以最诚挚的问候

  • 在尝试运行我的第一个HelloWorld应用程序时,我发现了以下异常: org.springframework.beans.factory.beanDefinitionStoreException:未能读取候选组件类嵌套异常为java.lang.IllegalStateException:由于找不到org/springframework/dao/dataAccessException,无法计算or