Hello,
I am using EF Core and I have table that is being problem with inserting new records into one of my tables.
All other tables have worked fine throughout my MVC web application:
Error:
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'MyTable' when IDENTITY_INSERT is set to OFF. at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__180_0(Task`1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke() at System.Threading.Tasks.Task.Execute() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.<ExecuteAsync>d__17.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.<ExecuteAsync
Here is the setup in the snapshot (I don't think this matters -> just for migration)
b.Property<int>("EventResourceId")
.ValueGeneratedOnAdd()
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);Here is what I did in my actual class:
/// <summary>
/// Gets or sets the event resource identifier.
/// </summary>
/// <value>
/// The event resource identifier.
/// </value>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int EventResourceId { get; set; }I tried running this on my SQL server (which is Azure)
SET IDENTITY_INSERT dbo.EventResources ON
Here is on model creating:
entity.HasKey(e => e.EventResourceId);
entity.HasIndex(e => new { e.Name, e.EventResourceTypeId }).IsUnique().HasName("UQ_EventResources_EventResourceTypeId_Name");I tried this in my Repo:
await BIContext.Database.ExecuteSqlCommandAsync("SET IDENTITY_INSERT [dbo].[EventResources] On").ConfigureAwait(false); public async Task<int> CreateEventResource(EventResourceCreateDTO eventResourceCreate)
{
if (eventResourceCreate == null)
{
throw new ArgumentNullException(nameof(eventResourceCreate));
}
await BIContext.Database.ExecuteSqlCommandAsync("SET IDENTITY_INSERT [dbo].[EventResources] On").ConfigureAwait(false);
var newEventResource = new EventResources
{
Name = eventResourceCreate.Name,
Description = eventResourceCreate.Description,
EventResourceId = eventResourceCreate.EventResourceTypeId,
CreatedByUserId = BIContext.UserRequestingId,
CreatedDate = DateTime.UtcNow,
ModifiedByUserId = BIContext.UserRequestingId,
ModifiedDate = DateTime.UtcNow
};
BIContext.EventResources.Add(newEventResource);
// fails here...
await SaveChangesAsync().ConfigureAwait(false);
return newEventResource.EventResourceId;
}What else can I try? I have like 6 other tables and all of them are working fine!