Cannot insert the value NULL into column 'ID&#

2019-10-17 19:54发布

我得到异常使用LINQ to SQL时“无法将NULL值插入列‘ID’”,我离开的ID属性为空,但我已在我的DBML文件我的ID自动生成。 这将正常工作,当我插入没有ID,并让SQL自动生成对我来说不使用LINQ。 问题是,LINQ是抛出一个异常,因为它看到ID为空,即使如果LINQ就随它去吧通过SQL是确定它。

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
    public int ID
    {
        get
        {
            return this._ID;
        }
        set
        {
            if ((this._ID != value))
            {
                this.OnIDChanging(value);
                this.SendPropertyChanging();
                this._ID = value;
                this.SendPropertyChanged("ID");
                this.OnIDChanged();
            }
        }
    }

Answer 1:

您需要包括“身份”在列定义:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int ID
{ ... }

如果这不会解决它尝试加入UpdateCheck=UpdateCheck.Never为好。



Answer 2:

我有一个类似的问题,引起了我的映射配置缺少键 (我只用了一个键,而不是复合,因为它应该是)。

想我会分享答案,因为我的问题是相似的,但我的解决方案是一个有点不同。

总之,我的上下文类和配置是这样的:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // Loads the configuration:
        modelBuilder.Configurations.Add(new MyMyDataClassConfiguration()); 
    }

    // ...
}


public class MyDataClassConfiguration : EntityTypeConfiguration<MyDataClass>
{
    public MyDataClassConfiguration()
    {
        ToTable("MyDataTableName"); // Maps to table

        // Specify composite key (I was missing a key here)
        HasKey(data => new {data.First_Key_Name, data.Second_Key_Name });
    }
}


文章来源: Cannot insert the value NULL into column 'ID'