使用 linq to sql 插入多个子记录

本文关键字:记录 插入 linq to sql 使用 | 更新日期: 2023-09-27 18:36:44

我正在创建一个轻弹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.
    }

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

任何帮助,不胜感激。

使用 linq to sql 插入多个子记录

请检查您的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();

如果数据库设置的 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);  

对于数据库中唯一标识符类型列的列。