У меня есть несколько таблиц, которые вместе составляют «Тест», который кто-то может пройти. Есть несколько типов (сценариев) тестирования, которые человек может пройти. Я работаю над функцией редактирования, которая позволит кому-то редактировать тестовые вопросы. Я хочу, чтобы эти отредактированные вопросы отображались во всех новых тестах этого типа, но все равно отображают старые вопросы при просмотре прошлых результатов тестов.
Для этого каждый «Тест» имеет TestId
идентификатор автоинкремента (вместе с его именем). Когда тест редактируется, я хочу сделать копию теста с новым TestId
и представить вопросы для редактирования.
Так, каков наилучший способ сделать копию и вставить ее в мою таблицу, используя LINQ to SQL? Это:
DataContext db = new DataContext(ConnectionString);
//Copy old test into identical new test but with a different script ID
var oldScript = db.TestScripts.Single(ds => ds.TestScriptId == oldScriptID);
var newScript = oldScript;
db.TestScripts.InsertOnSubmit(newScript);
db.SubmitChanges();
конечно говорит мне, что я Cannot add an entity that already exists.
Является ли единственный способ сделать это, чтобы просмотреть каждый столбец в TestScript и скопировать его вручную, а затем вставить его, и база данных выдаст ему новый идентификатор?
Редактировать
Я также попробовал
DataContext db = new DataContext(ConnectionString);
//Copy old test into identical new test but with a different script ID
var oldScript = db.TestScripts.Single(ds => ds.TestScriptId == oldScriptID);
var newScript = new TestScript();
db.TestScripts.InsertOnSubmit(newScript);
db.SubmitChanges();
надеясь, что он создаст новую пустую строку, тогда я смогу newScript = oldScript
и отправлю изменения, но это даст мне SqlDateTime overflow
ошибок.