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

データベースによって設定されていない場合は、上記の最初の 2 つのプロパティを設定する代わりに、挿入する行ごとに 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 に答える