asp.net-mvc-3 – 在MVC 3实体框架中添加多个到多个链接表的关系时发生主键冲突
|
我已经阅读了这里的几十个问题,这些问题最初似乎有类似的问题,但似乎并不完全相同.如果在某个地方得到解答,我会发表大量道歉,但就像我说的那样,我已经阅读过负载而无法找到答案. 我正在使用Entity Framework和MVC 3. 产品:ProductID [int,主键],名称等 标签:TagName [字符串,主键] ProductTags:ProductID,TagName 因此,要访问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> 当我SaveChanges()时,我得到以下异常:
所以我真正得到的是:为什么要尝试在dbo.Tags中添加任何内容?在我看来,这应该只是添加到ProductTags而不是标签.我没有在此方法的其他地方提及标签,因此在任何时候都不要尝试直接在Tags表中添加任何内容.感觉我的EF中可能有一些设置错误,但我无法想象它是从数据库生成的. 对不起,如果这是非常明显的,我感觉非常愚蠢.任何帮助非常感谢. 解决方法问题是您正在使用现有主键创建新的Tag对象.当调用SaveChanges()时,EF会检测已经跟踪的实体和添加的新实体的更改.由于EF未跟踪新的Tag对象,因此会尝试插入它.您需要明确告诉EF创建的标记是现有标记.要做到这一点,你需要attach它. 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);
}
此代码假定您没有多次附加单个标记,并且所有标记都是现有标记. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Internet Explorer 9中的URL查询字符串值的UTF-
- asp.net – Url重写与路由
- asp.net-core-mvc – ASP.NET Core MVC控制器在单独的程序集
- ASP.Net Webforms和ASP.Net MVC是基于组件还是基于动作?
- asp.net-mvc-4 – 升级到.NET 4.5和EF 5后,“启用迁移”失败
- 在ASP.NET中,获取基本UR1请求的最快方法是什么?
- asp.net-mvc – MVC 4 SimpleMembership – 登录后为什么We
- ASP.NET MVC表单和双字段
- 在ASP.NET 5中,如何在中间件中获取所选路由?
- asp.net-mvc-3 – 在ASP.NET MVC中本地化/翻译路由
- asp.net – 为什么Web API请求的正文读取一次?
- asp.net – 实现安全的“记住我”的最佳实践
- Asp.net会话交叉/混合
- asp.net-mvc-5 – 使用MVC属性路由的每个控制器的
- asp.net中mvc使用ajax提交参数的匹配问题解决探讨
- asp.net – 在C#中从IronPython调用时引用Python
- asp-classic – 用于新的Web应用程序的经典ASP与
- asp.net-mvc – 在Razor VB.net中使用MVC无法按预
- asp.net-mvc – 在哪里可以找到C#示例代码来实现
- asp.net-mvc – 适用于MVC 2 beta 2的MicrosoftM
