title: Programatically forcing field values for a TFS WorkItem
body: <p>I am writing a utility to read all the defects out of a legacy bug tracking system, and import them into TFS (2008/2010). I am using the TFS API to create new WorkItems, set their fields, and then save them. However I am unable to modify the "Created By" and "Created Date" fields, as these are set by the system. (and there are other fields too which I would like to be able to force values for, such as setting the submitter to be someone who is not a valid TFS user)</p>
  
  <pre><code>// these fail with "The value for the field 'Created By' cannot be changed."
  defectWorkItem.Fields["Created By"].Value = defect.Submitter;
  defectWorkItem.Fields["Created Date"].Value = defect.SubmitDate;
  </code></pre>
  
  <p>Obviously if I can't set these fields, I'll end up with all the legacy bugs looking like they were created on the same date by the same person.</p>
  
  <p>Is there a way I can use the API but force through changes to fields that are normally protected? I have looked into accessing the TFS database tables directly, but the schema looks complicated and I think it would be quite risky to attempt to modify the data there myself.</p>