title: Linq to SQL: Why am I getting IDENTITY_INSERT errors?
body: <p>I'm using Linq to SQL. I have a DataContext against which I am .SubmitChanges()'ing. There is an error inserting the identity field: 
  <PRE>Cannot insert explicit value for identity column in table 'Rigs' when IDENTITY_INSERT is set to OFF.</PRE></p>
  
  <p>The only identity field is "ID", which has a value of 0. It's defined in the DBML as:</p>
  
  <pre><code>[Column(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
  </code></pre>
  
  <p>There are a few foreign keys, and I've verified they have values that jive with the foreign tables' content.</p>
  
  <p>Why would I be getting this error?</p>
  
  <p>Edit: Here is the query:</p>
  
  <pre><code>exec sp_executesql N'INSERT INTO [dbo].[Rigs]([id], [Name], [RAM], [Usage], [MoreInfo], [datetime], [UID])
  VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6)
  SELECT [t0].[id], [t0].[OSID], [t0].[Monitors]
  FROM [dbo].[Rigs] AS [t0]
  WHERE [t0].[id] = @p7',N'@p0 int,@p1 varchar(1),@p2 int,@p3 varchar(1),@p4 varchar(1),@p5 datetime,@p6 int,@p7 
  int',@p0=0,@p1='1',@p2=NULL,@p3='4',@p4='5',@p5=''2009-03-11 20:09:15:700'',@p6=1,@p7=0
  </code></pre>
  
  <p>Clearly it is passing a zero, despite having never been assigned a value.</p>
  
  <p>Edit: Adding Code:</p>
  
  <pre><code>Rig rig = new Rig();
  int RigID;
  try
  { // Confirmed these always contain a nonzero value or blank
      RigID = int.Parse(lbSystems.SelectedValue ?? hfRigID.Value);
      if (RigID &gt; 0) rig = mo.utils.RigUtils.GetByID(RigID);
  }
  catch { }
  
  rig.Name = Server.HtmlEncode(txtName.Text);
  rig.OSID = int.Parse(ddlOS.SelectedValue);
  rig.Monitors = int.Parse(txtMonitors.Text);
  rig.Usage = Server.HtmlEncode(txtUsage.Text);
  rig.MoreInfo = Server.HtmlEncode(txtMoreInfo.Text);
  rig.RigsToVideoCards.Clear();
  foreach (ListItem li in lbYourCards.Items)
  {
      RigsToVideoCard r2vc = new RigsToVideoCard();
      r2vc.VCID = int.Parse(li.Value);
      rig.RigsToVideoCards.Add(r2vc);
  }
  rig.UID = c_UID &gt; 0 ? c_UID : mo.utils.UserUtils.GetUserByToken(this.Master.LiveToken).ID;
  
  if (!mo.utils.RigUtils.Save(rig))   
      throw new ApplicationException("There was an error saving your Rig. I have been notified.");
  hfRigID.Value = rig.id.ToString();
  
  public static User GetUserByToken(string token)
  {
      DataClassesDataContext dc = new DataClassesDataContext(ConfigurationManager.ConnectionStrings["MultimonOnlineConnectionString"].ConnectionString);
  return (from u in dc.Users
      where u.LiveToken == token
      select u).FirstOrDefault();
  }
  </code></pre>
  
  <p>Also, I notice that when I UPDATE an existing rig (insertonsubmit), it doesn't update.  Profiler doesn't even show any queries being run.</p>