2012-04-08 137 views
0

这里是我的代码修改后,事情似乎工作正常,但我对_db.SubmitChanges();从SQL Server表复制或克隆行

错误接收错误

不能一键添加一个实体已在使用中。

代码:

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?或者我可以不用临时桌子吗?

任何建议,张贴链接?

回答

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>(或任何你的实体真的叫)
  • 创建新的对象基于这些检索(实体) - 改变你的属性需要
  • 插入那些实体回到数据上下文
  • 保存更改。我选择了几下,并创建基于这些检索到的新的,增加的;

沿此代码段的线(在这里我有有ISOCode和一些国家CountryNamecountries东西新的LINQ到SQL DataContext,并最终节省):

// 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(); 
} 
+0

我使用LINQ to SQL,有人可以帮我上面提到的查询中的LINQ to SQL翻译。在这种情况下,我在初学者水平 – Jawad 2012-04-08 18:49:07

+1

@Jawad:用Linq-to-SQL示例更新了我的回复 – 2012-04-08 19:04:37

+0

请检查更新代码,我在代码的最后一行收到错误,错误为“无法添加实体与一个已经在使用的密钥“。 – Jawad 2012-04-09 15:00:01