Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
492 views
in Technique[技术] by (71.8m points)

c# - Cannot add an entity with a key that is already in use (LINQ)

I get this error Cannot add an entity with a key that is already in use. when I run the code below.

Tables: enter image description here

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();
    }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I was getting this error and it was because I had forgotten to set the Primary Key field in the database to "Identity Specification" (auto-increment). But that is just a guess


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...