不能用密钥已在使用添加的实体(LINQ) [英] Cannot add an entity with a key that is already in use (LINQ)

查看:152
本文介绍了不能用密钥已在使用添加的实体(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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆