0

これが変更後の私のコードです。問題なく動作しているようですが、エラーが発生しています_db.SubmitChanges();

エラーは

既に使用されているキーを持つエンティティを追加することはできません。

コード:

foreach (tblCourseNeededHours record in thisTable)
{
            tblCourseNeededHours newCNHR = new tblCourseNeededHours();
            newCNHR.Semester = a_semesterToOrganize;
            newCNHR.AssignToInstituteAdministrator = false;
            newCNHR.Freezed = false;

            _db.tblCourseNeededHours.InsertOnSubmit(newCNHR);
}

// submit all the changes
_db.SubmitChanges();

MVC 2.0 と SQL Server を使用しています。というテーブルがありますtblCourses

いくつかの選択基準に基づいて行を選択し、これらの行を に追加したいと考えていますtblCourse

一時テーブルを作成しtmpCourse、これらの選択した行に入力してから追加する必要がありtblCourseますか? または、一時テーブルなしで実行できますか?

何か提案、リンクを投稿しますか?

4

1 に答える 1

3

次のようなことができると思います:

INSERT INTO dbo.tblCourse(list of columns)
    SELECT (list of columns)
    FROM dbo.tblCourse
    WHERE (your condition here.....)

もちろん、列のリストは一致している必要があります。たとえば、列の数とデータ型が同じである必要があります。IDENTITYまた、egまたは計算列に値を挿入することはできません。

更新: Linq-to-SQL でこれを行うには、何らかの方法でデータを表現できるエンティティが必要です。それで:

  • 既存のデータベースからデータを選択してList<Entity>(またはエンティティが実際に呼ばれるもの)
  • 取得したものに基づいて新しいオブジェクト (エンティティ) を作成します - 必要に応じてプロパティを変更します
  • それらのエンティティをデータ コンテキストに挿入し直します
  • 変更を保存します。

このコード スニペットの行に沿ったもの (ここでは、いくつかの国に対してとを含むテーブルcountriesがあります。いくつかを選択し、取得したものに基づいて新しいものを作成し、それらの新しいものを Linq-to-SQL に追加します。最後に保存します):ISOCodeCountryNameDataContext

// create and use the Linq-to-SQL DataContext
using (LinqSampleDataContext ctx = new LinqSampleDataContext())
{
    // select some data
    IQueryable<country> existingCountries = ctx.countries.Where(c => c.CountryID < 100);

    // loop over selected data - create new entities based on data retrieved
    foreach (country c in existingCountries)
    {
        country newCountry = new country();
        newCountry.CountryName = c.CountryName;
        newCountry.ISOCode = "X" + c.ISOCode.Substring(1);

        // add new entities to DataContext
        ctx.countries.InsertOnSubmit(newCountry);
    }

    // submit all the changes
    ctx.SubmitChanges();
}
于 2012-04-08T09:14:43.917 に答える