Ich benutze Linq zu SQL. Ich habe einen DataContext, gegen den ich .SubmitChanges() 'ing bin. Es ist ein Fehler, das Identitätsfeld Einfügen: Linq zu SQL: Warum erhalte ich IDENTITY_INSERT Fehler?
Cannot insert explicit value for identity column in table 'Rigs' when IDENTITY_INSERT is set to OFF.
Die einzige Identitätsfeld ist „ID“, die einen Wert von 0. Es ist in der DBML definiert ist als:
[Column(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
gibt es ein paar ausländische Schlüssel, und ich habe überprüft, dass sie Werte haben, die mit dem Inhalt der fremden Tabellen übereinstimmen.
Warum sollte ich diesen Fehler bekommen?
Edit: Hier ist die Abfrage:
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
Offensichtlich ist es eine Null vorbei, obwohl nie ein Wert zugewiesen wurde.
Edit: Hinzufügen von 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 > 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 > 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();
}
Auch merke ich, dass wenn ich eine bestehende rig (InsertOnSubmit) AKTUALISIEREN, es nicht aktualisiert. Profiler zeigt nicht einmal an, dass Abfragen ausgeführt werden.
Können Sie den Code einfügen, in dem Sie das Objekt erstellen, und es dem DataContext hinzufügen? – Portman
Ich zweite Portman, bitte posten Sie den Code, den Sie für den Einsatz verwenden, siehe meine Antwort, es ist wahrscheinlich das Problem ist dort – eglasius