如何消除错误 3002?

2024-06-26

假设我在 SQL Server 2008 中有以下表定义:

CREATE TABLE Person
(PersonId INT IDENTITY NOT NULL PRIMARY KEY,
 Name VARCHAR(50) NOT NULL,
 ManyMoreIrrelevantColumns VARCHAR(MAX) NOT NULL)

CREATE TABLE Model
(ModelId INT IDENTITY NOT NULL PRIMARY KEY,
 ModelName VARCHAR(50) NOT NULL,
 Description VARCHAR(200) NULL)

CREATE TABLE ModelScore
(ModelId INT NOT NULL REFERENCES Model (ModelId),
 Score INT NOT NULL,
 Definition VARCHAR(100) NULL,
 PRIMARY KEY (ModelId, Score))

CREATE TABLE PersonModelScore
(PersonId INT NOT NULL REFERENCES Person (PersonId),
 ModelId INT NOT NULL,
 Score INT NOT NULL,
 PRIMARY KEY (PersonId, ModelId),
 FOREIGN KEY (ModelId, Score) REFERENCES ModelScore (ModelId, Score))

这里的想法是,每个人的每个模型可能只有一个 ModelScore,但每个人可以有任意数量的已定义模型的分数。据我所知,这个 SQL 应该自然地强制执行这些约束。 ModelScore 具有特定的“含义”,它包含在定义中。那里没有什么惊天动地的事情。

现在,我尝试使用设计器将其转换为实体框架。从数据库更新模型并进行一些编辑后,我有一个 Person 对象、一个 Model 对象和一个 ModelScore 对象。 PersonModelScore 作为连接表,不是一个对象,而是作为与其他名称的关联(假设为 ModelScorePersonAssociation)包含在内。关联的映射详细信息如下:



- Association
  - Maps to PersonModelScore
    - ModelScore
        ModelId : Int32       <=>  ModelId : int
        Score : Int32         <=>  Score : int
    - Person
        PersonId : Int32      <=>  PersonId : int
  

在右侧,ModelId 和 PersonId 值具有主键符号,但 Score 值没有。

编译后,我得到:

Error 3002: Problem in Mapping Fragment starting at line 5190: Potential runtime violation of table PersonModelScore's keys (PersonModelScore.ModelId, PersonModelScore.PersonId): Columns (PersonModelScore.PersonId, PersonModelScore.ModelId) are mapped to EntitySet ModelScorePersonAssociation's properties (ModelScorePersonAssociation.Person.PersonId, ModelScorePersonAssociation.ModelScore.ModelId) on the conceptual side but they do not form the EntitySet's key properties (ModelScorePersonAssociation.ModelScore.ModelId, ModelScorePersonAssociation.ModelScore.Score, ModelScorePersonAssociation.Person.PersonId).

我在设计器或其他方面做错了什么,如何修复错误?

非常感谢!


很晚才回答您的问题,我遇到了同样的问题,并发现实体框架设计器已将我的“ScoreId”列(相对于您的 PersonModelScore 表)标识为主键列。我将 ScoreId 的设置更改为 false,之后一切正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何消除错误 3002? 的相关文章

  • 从 SQL Server 表中获取随机行数

    我正在尝试使用快速方法从一个大表 超过 100 万行 中获取 5 个随机行数 到目前为止 我已经使用这些 SQL 查询进行了测试 Method 1 Select top 5 customer id customer name from Cu
  • 我可以将 Entity Framework 6 与 Visual Studio 2010 一起使用吗?

    我们的开发团队 和构建服务器 成功地将 Visual Studio 2010 和 Visual Studio 2012 混合用于我们的应用程序 然而 自从从 EF5 升级到 EF6 后 我们似乎不再能够使用 VS2010 进行构建 具体来说
  • 单元测试 SqlFunction

    我有一个公开 IQueryable 的存储库和一个处理特定查询的服务 这里有一些使用 DbFunctions 的方法 为了可测试 我创建了一个带有静态元素列表的假存储库并将其注入到服务中 问题是 由于我的服务查询列表并且不使用数据库 因此我
  • 对于.NET DateTime类型,为什么推断的数据库类型是SqlDbTypes.DateTime而不是SqlDbTypes.DateTime2?

    对于 NET DateTime类型 为什么推断的数据库类型是SqlDbTypes DateTime而不是SqlDbTypes DateTime2 See http msdn microsoft com en us library yy6y3
  • 如何自动将实体模型更改部署到数据库?

    目前我使用 Visual Studio 数据库项目 因此我可以一键将更改部署到数据库并将数据保留在数据库中 现在我希望能够在实体框架中创建模型并一键部署 所以我得到了从实体框架创建数据库的sql脚本 我可以运行此脚本来创建数据库 但我想将数
  • 基于 SQl Server 2008 中的 2 列的唯一键?

    SQL Server 是否可以拥有基于 2 列的唯一键 我可以在两列中都有重复项 但不能同时存在 MfgID CustNum 1 Cust01 1 Cust02 2 Cust02 1 Cust03 3 Cust03 3 Cust04 1 C
  • 在删除属性之前,必须删除或重新定义所有包含外键的内容 - EF Core

    使用实体框架核心添加外键后尝试添加迁移时出现上述错误 我正在添加FK public class ApplicantDetail Key public int Id get set ForeignKey GrantProgramFK publ
  • C# LINQ to Entities 查询两个不同属性的交集

    我有 3 个模型 名称为 Pencil具有 Pencil Id int 和 Pencil Colors IEnumerable 属性 Pen具有 Pen Id int 和 Pen Colors IEnumerable 属性 Colors有身
  • 连接别名计算列中的行

    我有两张表 一张名为 Car 一张名为 Mileage 汽车表有以下列 CarName varchar max 里程表有以下列 CarMileage int CarName varchar max TotalGasTrips int 我的代
  • 无法将 null 值插入列...当值不为 null 时

    在我的 C 代码中 我在数据库中有一个插入 但它引发了异常 无法将 NULL 值插入表 Moroccanoil Replicated dbo Boxes 的 BoxID 列 列不允许为空 插入失败 然而 在调试这段代码时 我发现该框实际上不
  • 在 WebAPI OData 请求中包含相关实体

    有没有办法在 OData 请求中包含相关实体 例如 我有一个 Person 实体和一个 Task 实体 这种关系是一对多的 一个人有很多任务 如果我使用 OData 请求查询数据 odata Person 要获取所有 Person 实体 返
  • 自引用多对多关系EF代码优先

    我使用 ASP NET MVC 和 Durandal Breeze 模板 假设我有以下课程 public class Person public int Id get set public string Firstname get set
  • Entity Framework Core - 在 Queryable 中使用扩展方法

    我有以下查询 db Users AsQueryable Where u gt u Id userResolver LoggedUserId u Packages Where p gt p StatusId int PackageStatus
  • 如何编辑表以启用级联删除?

    我有一个代表用户的表 当用户被删除时我得到 DELETE 语句与 REFERENCE 约束冲突 显然 CASCADE DELETE在SQL Server中并不像我想象的那么容易 需要将选项添加到表中 问题是 我不知道如何添加CASCADE
  • 删除 SQL Server 上的所有扩展属性

    如何以可编写脚本的方式删除 SQL Server 上的所有扩展属性 如果您想要一个能够一次性删除所有扩展属性的脚本 请使用 Jamie Thomson 创建的脚本 该脚本将为所有扩展属性生成删除 您可以从这里下载article http s
  • 设置域实体的身份

    域中的所有实体都需要具有身份 通过继承自DomainEntity 我能够为类提供身份 城市域实体 为了方便阅读而进行了精简 public class City DomainEntity IAggregateRoot public strin
  • 如何确保在 EF Code First 中对表关系启用级联删除?

    我想使用代码优先在表上启用级联删除 从头开始重新创建模型时 即使自动设置关系 也不会设置 CASCADE DELETE 奇怪的是 它确实为某些具有多对多关系的表启用了此功能 但您可能会认为这可能会出现问题 Setup 表 A 表B的FK指向
  • DbContext 和连接池

    在我继承的应用程序中 基本控制器中有这个 应用程序中的所有其他控制器都继承自该控制器 public BaseController db new MyDbContext db Database Log s gt Debug Write s p
  • 为什么有多个 DbContext 类?

    当我使用 LINQ 和 dbml 文件进行编程时 只有一个上下文 但是 当我创建一个 MVC 站点时 似乎每个实体都有单独的上下文 这是 MVC 教程向我展示的方式 使用 电影 上下文 I have public class Account
  • 使用 C# 检索 SQL Server 中具有 varchar 数据类型的字段的大小

    我正在使用 VS 2010 和 SQL Server 2008 在 ASP NET 中创建一个项目 我想检索具有以下内容的列的大小varchar数据类型 e g Varchar 20 我想要 20 而不是最大可能的大小varchar使用 C

随机推荐