PDA

View Full Version : سوال: رفع خطای Cannot insert explicit value for identity column in table IDENTITY_INSERT is OFF



mahdibham
یک شنبه 13 آذر 1401, 10:13 صبح
با سلام خدمت دوستان..
عمدتا در هنگام اینسرت یا اضافه کردن یک دیتا، خطایی که در زیر آمده بروز میده و بعد از یک ایست برنامه و راه اندازی مجدد خطایی نمیده.

Microsoft.EntityFrameworkCore.DbUpdateException: 'An error occurred while saving the entity changes. See the inner exception for details.'
SqlException: Cannot insert explicit value for identity column in table 'tbl_Files' when IDENTITY_INSERT is set to OFF.

با این که داخل کد در هنگام ذخیره کردن دیتا به صورت زیر هم عمل کردم، کماکان این خطا رخ میده.

emdadDB.TblFiles.Add (tblFile);
emdadDB.Database.ExecuteSqlRaw ("SET IDENTITY_INSERT dbo.tbl_Files ON;");
emdadDB.SaveChanges ();
emdadDB.Database.ExecuteSqlRaw ("SET IDENTITY_INSERT dbo.tbl_Files OFF;");


خطا دقیقا روی خط SaveChanges رخ میده.

bitasoft.ir
یک شنبه 19 شهریور 1402, 01:49 صبح
این خطا به دلیل تلاش برای وارد کردن مقدار دستی به یک ستون Identity در جدول مرتبط با tbl_Files رخ می‌دهد. ستون‌های Identity به صورت خودکار توسط SQL Server مقداردهی می‌شوند و نمی‌توان به صورت دستی به آنها مقدار دهی کرد. برای رفع این خطا، می‌توانید اقدامات زیر را انجام دهید:
حذف کدهای مرتبط با IDENTITY_INSERT: ابتدا مطمئن شوید که کدهای زیر را از برنامه‌ی خود حذف کرده‌اید، چرا که از IDENTITY_INSERT برای جلوگیری از خطای مرتبط با مقداردهی دستی به ستون Identity استفاده نمی‌شود.
emdadDB.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.tbl_Files ON;");
emdadDB.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.tbl_Files OFF;");
اطمینان از تنظیمات مدل: اطمینان حاصل کنید که در مدل شما، ستون مرتبط با Identity به درستی تنظیم شده باشد. برای این کار، از تزریق ویژگی [Key] به خصوصیتی که به عنوان کلید اصلی (Primary Key) استفاده می‌شود، استفاده کنید. به عنوان مثال:
public class TblFile
{
[Key]
public int FileId { get; set; }
// سایر ویژگی‌ها
}
استفاده از DatabaseGeneratedOption.Identity: اگر از Entity Framework Core استفاده می‌کنید، می‌توانید با استفاده از ویژگی [DatabaseGenerated(DatabaseGeneratedOption.Identity )] به ستون Identity اعلام کنید که مقدار آن به صورت خودکار توسط پایگاه داده تعیین شود. به عنوان مثال:

public class TblFile
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity )]
public int FileId { get; set; }
// سایر ویژگی‌ها
}
استفاده از Add() بدون تنظیم دستی ID: وقتی یک مورد جدید را به DbContext اضافه می‌کنید، از Add() بدون تنظیم ID به صورت دستی استفاده کنید. به این صورت مقدار ID به صورت خودکار توسط پایگاه داده تعیین خواهد شد:
emdadDB.TblFiles.Add(tblFile);
emdadDB.SaveChanges();


بررسی ویژگی‌ها: مطمئن شوید که در تعریف مدل و مهاجرت‌ها، هیچ تنظیمات غیرمجازی برای ستون Identity وجود ندارد که ممکن است مقداردهی دستی را فراموش کنند.
با انجام این مراحل، امکان تولید خطا مرتبط با مقداردهی دستی به ستون Identity باید کاهش یابد و عملیات افزودن مورد جدید به جدول tbl_Files بدون مشکل انجام شود.


با سلام خدمت دوستان..
عمدتا در هنگام اینسرت یا اضافه کردن یک دیتا، خطایی که در زیر آمده بروز میده و بعد از یک ایست برنامه و راه اندازی مجدد خطایی نمیده.

Microsoft.EntityFrameworkCore.DbUpdateException: 'An error occurred while saving the entity changes. See the inner exception for details.'
SqlException: Cannot insert explicit value for identity column in table 'tbl_Files' when IDENTITY_INSERT is set to OFF.

با این که داخل کد در هنگام ذخیره کردن دیتا به صورت زیر هم عمل کردم، کماکان این خطا رخ میده.

emdadDB.TblFiles.Add (tblFile);
emdadDB.Database.ExecuteSqlRaw ("SET IDENTITY_INSERT dbo.tbl_Files ON;");
emdadDB.SaveChanges ();
emdadDB.Database.ExecuteSqlRaw ("SET IDENTITY_INSERT dbo.tbl_Files OFF;");


خطا دقیقا روی خط SaveChanges رخ میده.