Search code examples
c#asp.net-mvcnpocoumbraco8

Error when try to insert value in database with NPoco


I am using this example from Umbraco docs and when i try to save values to the database table i am getting this error: Cannot insert the value NULL into column 'Id', table 'petapoco.dbo.BlogComments'; column does not allow nulls. INSERT fails. The statement has been terminated.

Also, after table is created and i check it in database, I can see that primary key and autoincrement option is not set for id field.

And this is how i insert values:

public class Class1 : IUserComposer
{
    public void Compose(Composition composition)
    {
       composition.Components().Append<SubscribeToContentServiceSavingComponent>();
    }
    public class SubscribeToContentServiceSavingComponent : IComponent
    {
        public void Initialize()
        {
            MemberService.Saved += MemberService_Saving;
        }

        public void Terminate()
        {
        }

        private void MemberService_Saving(IMemberService sender, SaveEventArgs<IMember> e)
        {
            foreach (IMember member in e.SavedEntities)
            {
                var blogPostToAdd = new BlogCommentSchema();

                blogPostToAdd.BlogPostUmbracoId = member.Id;
                blogPostToAdd.Name = member.Name;
                blogPostToAdd.Email = member.Name;
                blogPostToAdd.Website = member.Name;
                blogPostToAdd.Message = member.Name;

                using (var scope = Current.ScopeProvider.CreateScope(autoComplete:true))
                {
                    var database = scope.Database;
                    // use database  
                    scope.Database.Insert<BlogCommentSchema>(blogPostToAdd);
                    scope.Complete();
                }

            }
        }
    }
}

Solution

  • Good guy on Umbraco forum solved my problem. This is the missing part in my class:

    [PrimaryKeyColumn(AutoIncrement = true, IdentitySeed = 1)]
    

    So my class finally should look like this:

    [TableName("BlogComments")]
        [PrimaryKey("Id", AutoIncrement = true)]
        [ExplicitColumns]
        public class BlogCommentSchema
        {
            [PrimaryKeyColumn(AutoIncrement = true, IdentitySeed = 1)]
            [Column("Id")]
            public int Id { get; set; }
    
            [Column("BlogPostUmbracoId")]
            public int BlogPostUmbracoId { get; set; }
    
            [Column("Name")]
            public string Name { get; set; }
    
            [Column("Email")]
            public string Email { get; set; }
    
            [Column("Website")]
            public string Website { get; set; }
    
            [Column("Message")]
            [SpecialDbType(SpecialDbTypes.NTEXT)]
            public string Message { get; set; }
        }
    }