Tôi đang sử dụng LINQ to SQL. Tôi có một DataContext mà tôi đang dùng .SubmitChanges() 'ing. Có một lỗi khi chèn lĩnh vực nhận dạng: LINQ to SQL: Tại sao tôi gặp lỗi IDENTITY_INSERT?
Cannot insert explicit value for identity column in table 'Rigs' when IDENTITY_INSERT is set to OFF.
Các lĩnh vực nhận dạng duy nhất là "ID", trong đó có một giá trị 0. Nó được định nghĩa trong DBML như:
[Column(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
Có một vài ngoại và tôi đã xác minh rằng họ có các giá trị hấp dẫn với nội dung của bảng ngoại.
Tại sao tôi gặp phải lỗi này?
Edit: Đây là truy vấn:
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
Rõ ràng nó đang đi qua một số không, mặc dù đã bao giờ được gán một giá trị.
Chỉnh sửa: Thêm 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();
}
Ngoài ra, tôi nhận thấy rằng khi tôi cập nhật một giàn khoan hiện có (InsertOnSubmit), nó không cập nhật. Profiler thậm chí không hiển thị bất kỳ truy vấn nào đang chạy.
Bạn có thể đưa mã vào nơi bạn tạo đối tượng và thêm nó vào DataContext không? – Portman
Tôi thứ hai Portman, xin vui lòng gửi mã bạn đang sử dụng cho chèn, xem câu trả lời của tôi, nó có khả năng vấn đề là ở đó – eglasius