0

我正在创建一个轻弹 Web 应用程序。

我有一个 flickrUser 表和一个 flickrPhoto 表

我已经插入了 flickrUser 记录,现在我想插入一些 flickrPhoto 记录;

FlickrPhoto:
 -photoid
 -flickruserid
 -id (PK)

这是我尝试插入 flickrphoto 记录的方式(flickrphoto 存储在 MyPhoto 表中)

public void insertList(List<string> photoids, string flickruserid)
    {
        PicsPreciousLinqDataContext db = new PicsPreciousLinqDataContext();
        for (int i = 0; i < photoids.Count; i++)
        {              
                MyPhoto mf = new MyPhoto();
                mf.photoId = photoids[i];
                mf.source = "flickr";

                var query = from b in db.FlickrUsers
                            where b.nsid == flickruserid
                            select b;

                FlickrUser fUser = query.FirstOrDefault();
                mf.FlickrUserId = fUser.nsid;
                db.MyPhotos.InsertOnSubmit(mf);                
        }
        db.SubmitChanges();  <= Cannot add an entity with a key that is already in use.
    }

我已经尝试了一些变化,但也没有成功。插入多个子记录的正确方法是什么?

任何帮助表示赞赏。

4

2 回答 2

2

请检查您的MyPhotos表,我怀疑它的userId列作为主键。它应该是外键/引用键列。

添加以下代码,而不是您的代码,

 for (int i = 0; i < photoids.Count; i++)
    {              
            MyPhoto mf = new MyPhoto();
            mf.photoId = photoids[i];
            mf.source = "flickr";

            var query = from b in db.FlickrUsers
                        where b.nsid == flickruserid
                        select b;

            FlickrUser fUser = query.FirstOrDefault();
            mf.FlickrUserId = fUser.nsid;
            db.MyPhotos.Add(mf);               
    }
db.SubmitChanges();
于 2012-06-09T17:01:24.500 回答
1

如果 id 的值由数据库设置(即 NEWID() 作为默认值,或自动递增),则在您的 dbml 设计器中,单击作为主键的列并确保以下属性具有这些值:

Auto Generated Value: True
Auto-Sync: OnInsert
Primary Key: True

如果它不是由数据库设置,那么您必须在 C# 代码中为插入的每一行为 Id 列创建唯一值,而不是设置上面的前两个属性。

这可以通过以下方式完成:

 Guid.NewGuid();

所以在你的代码中:

PicsPreciousLinqDataContext db = new PicsPreciousLinqDataContext();
...
MyPhoto mf = new MyPhoto();
            mf.photoId = photoids[i];
            mf.source = "flickr";
            mf.id = Guid.newGuid();
...
db.MyPhotos.InsertOnSubmit(mf);  

用于数据库中 uniqueIdentifier 类型列的列。

于 2012-06-09T17:25:42.557 回答