这是修改后的代码,事情似乎工作正常,但我收到_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
?或者我可以在没有临时桌的情况下完成吗
任何建议,帖子链接?
答案 0 :(得分: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
,其中包含ISOCode
和CountryName
的某些国家/地区;我正在选择一些,并创建基于检索到的新的,将新的那些添加到Linq-to-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();
}