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列或计算列中。

更新:要在 Linq-to-SQL 中执行此操作,您必须拥有一个可以以某种方式表示您的数据的实体。然后:

  • 从您现有的数据库中选择数据到一个List<Entity>(或任何您的实体真正被称为)
  • 根据检索到的对象创建新对象(实体) - 根据需要更改您的属性
  • 将这些实体重新插入数据上下文
  • 保存更改。

类似于此代码片段的内容(这里我有一个表countries,其中包含一些国家的 anISOCode和 a CountryName;我选择了一些,并根据检索到的内容创建新的,将这些新的添加到 Linq-to-SQLDataContext并最终保存):

// 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 回答