MVC 3 实体框架中从多对多链接表添加关系时发生主键冲突

2023-12-27

我已经阅读了这里的许多问题,这些问题乍一看似乎有类似的问题,但看起来并不完全相同。如果这个问题在某个地方得到了回答,我深表歉意,但就像我说的,我已经阅读了很多内容,但找不到答案。

我正在使用实体框架和 MVC 3。 我正在尝试向实体框架中的产品添加标签,这些产品具有多对多关系,并且有一个表仅使用链接表中的两个键将它们链接起来,因此 EF 将标签压缩为 Product 的属性。表的设置如下:

产品:ProductID [int,主键]、名称等。

标签:TagName [字符串,主键]

产品标签:产品 ID、标签名称

因此,要访问 ProductTags 我可以使用 Product.Tags

这是我的代码:

dbProduct.Tags.Clear();
foreach (var tag in productModel.Tags)
{
    Data.Tag dbTag = new Data.Tag();
    dbTag.TagName = tag;
    dbProduct.Tags.Add(dbTag);
}

dbProduct 是 Product 实体,Data 是命名空间。 ProductModel.Tags 是List<string>

When I SaveChanges()我得到以下异常:

“违反主键约束'PK_Tags_1'。无法插入 对象“dbo.Tags”中存在重复键。\r\n该语句已 终止了。”

所以真正让我困惑的是:为什么它试图向 dbo.Tags 添加任何内容?在我看来,这应该简单地添加到 ProductTags 而不是标签。我在此方法的其他地方没有提及标签,因此绝不尝试将任何内容直接添加到标签表中。感觉我的 EF 中可能设置了错误,但我想不出是什么,它是从数据库生成的。

再次抱歉,如果这太明显了,我感觉很愚蠢。非常感谢任何帮助。


问题是你正在创建一个新的Tag具有现有主键的对象。什么时候SaveChanges()称为 EF 检测其已跟踪的实体和添加的新实体的变化。自从你的新TagEF 未跟踪对象,它尝试插入它。

您需要明确告诉 EF 创建的标签是现有标签。为此,您需要attach http://msdn.microsoft.com/en-us/library/dd487214.aspx it.

dbProduct.Tags.Clear();
foreach (var tag in productModel.Tags)
{
    Data.Tag dbTag = new Data.Tag();
    dbTag.TagName = tag;

    db.TagSet.Attach(dbTag);

    dbProduct.Tags.Add(dbTag);
}

此代码假设您没有多次附加单个标签,并且所有标签都是现有标签。

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

MVC 3 实体框架中从多对多链接表添加关系时发生主键冲突 的相关文章

随机推荐

  • Github - 有时无法通过 ssh 连接

    情况 我正在使用Linux 薄荷伴侣17 2 当通过 ssh 推送到 github 时 有时连接会失败 通常会在重新启动计算机和网络后恢复 几天后 可能又变坏了 很混乱 通过http推送从来没有这样的问题 但它需要密码 不太方便 调试信息
  • FHSTwitterEngine - 'NSInvalidArgumentException','数据参数为零'

    我正在使用 FHSTwitterEngine 将 gif 发布到 twitpic 当我的 iPhone 上有 wifi 或 3G 连接时 一切正常 但我还想在没有连接或上传失败时实现一些错误处理 因此 为了进行测试 我将 iPhone 置于
  • 连接两个表的表是否应该有自己的ID?

    我有两张桌子 First id name Second id name 另一张表连接前两个表 Third first id second id 第三张桌子在那里only解决M N问题 应该有自己的ID吗 如果表仅包含两个外键 则没有理由拥有
  • Mybatis 嵌套一对一或一对多关系映射

    我使用 myBatis 来映射一个简单的数据库 作为示例 它由4个型号组成 User Car Tariff 保险 User has 私人列表 carList and 私人关税关税以及其他一些带有 getter 和 setter 的字段 Ca
  • 如何识别特定时间范围内发生的行?

    我有一张表 其中包含患者的医院就诊情况 我正在尝试标记上次访问后 90 天内发生的访问 然而 需要注意的是 一旦一次访问被标记为重叠访问 该访问就不应用于评估与另一次访问的重叠 让我用一个例子来解释一下 Table visitID pati
  • 数据注释 - 使用属性扩展并将正则表达式存储在资源文件中

    我目前正在与MVC4数据注释来处理验证 我正在开发一个非常国际化的网站 因此我将所有文本保存在资源文件中 我还想在资源文件中保留用于验证的正则表达式 以便我可以使用相同的代码进行检查 例如 邮政编码 英国 and 邮政编码 美国 只需使用不
  • PropertyDescriptor和WPF绑定机制

    背景 我正在调查一些代码并遇到一个包含DataGrid有一些绑定列 Binding Binding calc from 我到处搜索 但没有包含名为的属性的类calc from 然后我偶然发现了一些PropertyDescriptor类 我认
  • 为什么 C# 7 ValueTuples 实现 Equals 方法而不是双等于运算符?

    考虑以下代码片段 var tuple1 7 foo var tuple2 7 foo var tuple3 42 bar Assert That tuple1 Equals tuple2 Is True This passes Assert
  • Java - Future.get() 多次调用

    Java 是如何实现的Future get 任务完成后多次调用的情况下表现如何 它返回相同的结果吗 或者抛出一个ExecutionException如果计算失败 一次又一次出现相同的异常 我在文档中找不到任何有关它的内容 您可以致电get
  • Android源代码不工作,通过glReadPixels读取帧缓冲区

    我是 Android 开发新手 有一项任务是在指定的时间间隔后读取帧缓冲区数据 我想出了以下代码 public class mainActivity extends Activity Bitmap mSavedBM private EGL1
  • 我应该使用哪种依赖注入工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Spring 按需创建 Bean

    我想在启动后以工厂模式创建一些 spring beans 例如 我经常有一些工作要做 并且需要创建一个任务 bean 它可能依赖于其他单例 spring bean 并执行它 可能有多个工作要同时执行 因此每个任务 bean 都需要是独立的
  • 第一个 DropDownList 更改后如何从数据库加载第二个 DropDown 列表

    我正在构建一个网络应用程序 在某些时候 用户需要将数据输入到表单中 该表单有几个文本字段和DropDownLists 其中一个 DDL 依赖于其先前的 DDL 发生的情况是 当用户从第一个 DDL 中选择一个值时 第二个 DDL 应该从数据
  • 预约调度算法(N个人,N个忙闲时段,约束-满足)

    问题陈述 我们有一位雇主想要面试 N 个人 因此安排了 N 个面试时段 每个人都有一个空闲 忙碌的时间表 给出一个算法 如果可能的话 将 N 个人安排到 N 个位置 如果不可能 则返回一个标志 错误 等 最快的运行时复杂度是多少 到目前为止
  • 玩!框架 - 处理 POST 请求

    这是处理登录 POST 请求的路由 POST login submit controllers Users loginSubmit user String password String 这是login scala html
  • 比较 2 个不同行和列之间的日期

    我在弄清楚这一点时遇到问题 这是一个示例表 我需要能够找到的是对于给定的客户 ID 和 Part ID Discontinue Date 大于下一行的 effective Date 的任何记录 这是一个客户定价表 因此第 53 行的 Dis
  • 有没有办法在 Spring XML 中指定默认属性值?

    我们正在使用一个属性占位符配置器在 Spring 配置中使用 java 属性 详细信息在这里 http static springsource org spring docs 2 5 x reference beans html beans
  • 使用 WinHTTP 和 Excel 配置代理

    我正在使用 WinHTTP 在 Excel VBA 宏中执行 GET 请求 但是 如果我尝试从具有代理的网络中的计算机发出请求 则它不起作用 如果我手动配置它 它可以工作 但我认为使用我正在开发的工具的人不会知道他们的代理服务器 有没有办法
  • 为什么 _.escape 会修改 Underscore.js 中的 / 字符?

    我正在浏览下划线 js api http underscorejs org escape我注意到 escape逃脱 lt gt and 人物 让我惊讶的是逃跑 有没有理由逃避 我不知道的角色 EDIT 好吧 看来是推荐的OWASP http
  • MVC 3 实体框架中从多对多链接表添加关系时发生主键冲突

    我已经阅读了这里的许多问题 这些问题乍一看似乎有类似的问题 但看起来并不完全相同 如果这个问题在某个地方得到了回答 我深表歉意 但就像我说的 我已经阅读了很多内容 但找不到答案 我正在使用实体框架和 MVC 3 我正在尝试向实体框架中的产品