Quantcast
Channel: ADO.NET, Entity Framework, LINQ to SQL, NHibernate
Viewing all articles
Browse latest Browse all 1698

EF Core Failing on IDENTITY_INSERT is set to OFF

$
0
0

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!


Viewing all articles
Browse latest Browse all 1698

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>