Entity Framework CTP 4. “Cannot insert the value NULL into column” - Even though there is no NULL value

走远了吗. 提交于 2019-11-27 19:35:24

Have you tried explicitly specifying the StoreGeneratedPattern?

modelBuilder.Entity<BOB>()
    .HasKey(p => p.Id)
        .Property(p => p.Id)
            .StoreGeneratedPattern = StoreGeneratedPattern.None;

builder.Entity<BOB>().MapSingleType().ToTable("BOB");
sitem00n

i have the same issue here and it's really an ugly solution.

 [Key]
public Int64 PolicyID { get; set; }

this is NOT an auto generated number

then i hit the same error.

EF Code First CTP5

after apply this:

 [Key]
 [DatabaseGenerated(DatabaseGeneratedOption.None)]
 public Int64 PolicyID { get; set; }

then it will work.

I'm using EF 4.1, Model First and came across this problem. Here's how I solved it:

When using the Model Designer surface, when you create an Entity, you have to define a 'Key' property, it defaults to Id, int32.

In my situation, I've chosen to use Guids for the Id, so I'd switch the int32 to Guid. But if you examine this Id after you create the entity, I saw that the Id's 'StoreGeneratedPattern' had 'identity' selected. At first I didn't think that was a problem, but when I examined the SQL being used to insert into the database, it was a bit weird in that it wasn't sending my Id. Frustrating!

But once I went back and changed the 'StoreGeneratedPattern' from 'identity' to 'none', regenerated the db and rebuilt the project, this strange {"Cannot insert the value NULL into column 'Id', table 'TestDB.dbo.BOB'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."} stopped happening.

FYI - upon viewing the sql some more it seems that if you have 'identity' chosen for 'StoreGeneratedPattern', the EF saves the object to the db (sans Id), then immediately fetches back the identity and saves that back to your object. i.e. this choice for 'StoreGeneratedPattern' relies on the db to generate your Id, NOT your code!

It happened to me when I had a primary key missing on the respected column (the identity column) in the db's schema. I exported data between SQL servers, using SSMS Export tool and creating a new database, but didn't realize that it's exporting only the data, without keys.

You could also use

modelBuilder.Entity<BOB>()
    .HasKey(p => p.Id)
    .Property(p => p.Id)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

builder.Entity<BOB>().MapSingleType().ToTable("BOB");

I had a similar situation but in my case even setting Identity to off didn't help.

The problem was connected with Primary Key, which I've missed to add in my Entity Model.

Here is the script which was generating the model:

 CREATE TABLE [im].[SomeGroup]
 (
    [Id] INT NOT NULL IDENTITY(1,1), -- this is mandatory for EF
    [OtherGroupId] INT NOT NULL,
    [Title] NVARCHAR(512) NOT NULL
 )

The C# code for above is:

Insert(new SomeGroup
{
  // I'm not providing Id here, cause it will be auto-generated
  SomeGroupId = otherGroup.Id,
  Title = otherGroup.Title
});

Here is also some explanation of that.

I know that this question is somehow dated and an accepted solution has been already found, however I thought it would be useful if I share my findings.

I had this error today because I was using two different instances of the same DataContext. I was creating a new model with some properties - values for these properties were loaded from the database using one instance of the DataContext, then I was trying to push this newly created model into database calling first Add() and then SaveChanges() on a different instance of the DataContext. After I started using the same instance for both getting the values for the properties and actually adding and saving the new object - everything started working.

If you are using database first approach then first delete the respective entity from the edmx diagram and then Update the model from database , this will surely resolve your issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!