不能用密钥已在使用添加的实体(LINQ) [英] Cannot add an entity with a key that is already in use (LINQ)
问题描述
我得到这个错误无法用钥匙已在使用中添加一个实体。
当我运行下面的代码。
表:
我失去了什么?
私人无效CopyAllPageObjects(INT fromPageID,诠释toPageID)
{
CMSDataContext _db =新CMSDataContext();
//复制页面对象
VAR originalPageObjects =(从X在_db.CMSPageObjects
,其中x.PageID == fromPageID
选择X);
名单,LT; CMSPageObject> newPageObjects =新的List< CMSPageObject>();
的foreach(CMSPageObject宝originalPageObjects)
{
CMSPageObject newPageObject =新CMSPageObject();
newPageObject.PageID = toPageID;
newPageObject.CMSObjectID = po.CMSObjectID;
newPageObject.Name = po.Name;
newPageObject.Sorting = po.Sorting;
newPageObjects.Add(newPageObject);
//复制页面对象的属性值
VAR originalPoavs =(从X在_db.CMSPageObjectAttributeValues
,其中x.CMSPageObjectID == po.ID
选择X);
名单,LT; CMSPageObjectAttributeValue> newPoavs =新的List< CMSPageObjectAttributeValue>();
的foreach(CMSPageObjectAttributeValue poav在originalPoavs)
{
CMSPageObjectAttributeValue newPoav =新CMSPageObjectAttributeValue();
newPoav.CMSAttributeID = poav.CMSAttributeID;
newPoav.CMSPageObjectID = newPageObject.ID;
newPoav.LCID = poav.LCID;
newPoav.Value = poav.Value;
newPoavs.Add(newPoav);
}
_db.CMSPageObjectAttributeValues.InsertAllOnSubmit(newPoavs);
}
_db.CMSPageObjects.InsertAllOnSubmit(newPageObjects);
_db.SubmitChanges();
}
它看起来像你试图添加一个对象,而另一个具有相同主键的存在。是 PAGEID
或 CMSObjectID
主键?或 CMSAttributeID
?
您可能也想分享你的数据表看怎么样更多的数据。
更新:您添加的数据库结构后,我想看看这条线接近:
newPoav.CMSPageObjectID = newPageObject.ID;
的
newPageObject.ID
可能是未知在这个时候,因为你没有对象添加到数据库,但(我怀疑 ID
是标识)。我想你可以使用:
newPoav.CMSPageObject = newPageObject
I get this error Cannot add an entity with a key that is already in use.
when I run the code below.
Tables:
What am i missing?
private void CopyAllPageObjects(int fromPageID, int toPageID)
{
CMSDataContext _db = new CMSDataContext();
// Copy page objects
var originalPageObjects = (from x in _db.CMSPageObjects
where x.PageID == fromPageID
select x);
List<CMSPageObject> newPageObjects = new List<CMSPageObject>();
foreach (CMSPageObject po in originalPageObjects)
{
CMSPageObject newPageObject = new CMSPageObject();
newPageObject.PageID = toPageID;
newPageObject.CMSObjectID = po.CMSObjectID;
newPageObject.Name = po.Name;
newPageObject.Sorting = po.Sorting;
newPageObjects.Add(newPageObject);
// Copy page object attribute values
var originalPoavs = (from x in _db.CMSPageObjectAttributeValues
where x.CMSPageObjectID == po.ID
select x);
List<CMSPageObjectAttributeValue> newPoavs = new List<CMSPageObjectAttributeValue>();
foreach (CMSPageObjectAttributeValue poav in originalPoavs)
{
CMSPageObjectAttributeValue newPoav = new CMSPageObjectAttributeValue();
newPoav.CMSAttributeID = poav.CMSAttributeID;
newPoav.CMSPageObjectID = newPageObject.ID;
newPoav.LCID = poav.LCID;
newPoav.Value = poav.Value;
newPoavs.Add(newPoav);
}
_db.CMSPageObjectAttributeValues.InsertAllOnSubmit(newPoavs);
}
_db.CMSPageObjects.InsertAllOnSubmit(newPageObjects);
_db.SubmitChanges();
}
It looks like you're trying to add an object, while another one with same primary key exists. Are PageID
or CMSObjectID
primary keys? Or CMSAttributeID
?
You might also want to share more data about how your data tables look like.
Update: after you added database struct, I would look closer at this line:
newPoav.CMSPageObjectID = newPageObject.ID;
the newPageObject.ID
is probably not known at this time, because you didn't add the object to the DB yet (I suspect ID
is identity). I think you could use:
newPoav.CMSPageObject = newPageObject
这篇关于不能用密钥已在使用添加的实体(LINQ)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!