背景:
我在同一个解决方案中有一个 Web API 项目和一个类库项目,它们共享相同的模型类。两个项目共享同一个数据库,并且都使用 DbContext 来读取/写入数据。
Web API 项目以典型的 UnitOfWork 模式设置并且运行良好。
课堂项目有点不同。我在构造函数而不是 Web.config 文件中指定连接字符串:
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 ...
}
}
我使用 Web API 调用类库中定义的函数。当我尝试使用类库查询数据库时出现错误。
问题:
在类库项目中,我得到一个 EntityCommandCompilationException 内部异常为:
InnerException: System.Data.MappingException HResult=-2146232032 Message= (82,10) : error 3034: 从第 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 的可构造类型。 " 这在 Web API 项目中工作得很好。
为什么连接到同一个数据库并且配置基本相同的两个 DbContext 会执行不同的操作?我一定错过了一个配置步骤,但我不知道是哪个。
谢谢您的帮助!