I have a number of tables that together make up a "Test" that somebody can take. There are multiple types (scripts) of Test a person can take. I'm working on an Edit function that will allow somebody to edit the Test Questions. I want these edited questions to show up on all new Tests of that type, but still show the old questions when viewing past test scores.  

To do this each "Test" has a `TestId` auto-increment identity (along with its name). When a test is edited I want to make a copy of the test with a new `TestId` and present the questions for editing.

So what is the best way to make the copy and insert it into my table using LINQ to SQL? This:

```
   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();

```

of course tells me that I `Cannot add an entity that already exists.`

Is the only way to do this to go through every column in the TestScript and copy it manually, then insert it, and the database will give it a new Id?

**Edit**  

I've also tried 

```
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();

```

hoping that it would make a new empty row, then I could `newScript = oldScript` and submit the changes, but it gives me `SqlDateTime overflow` errors.