无法将值NULL插入列'ID'

时间:2013-03-10 19:55:50

标签: c# sql linq linq-to-sql

我在使用Linq to Sql时遇到异常“无法将值NULL插入列'ID'”,我将ID属性留空,但我已将我的ID设置为在我的DBML文件中自动生成。当我插入没有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();
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

您需要在列定义中包含“IDENTITY”:

[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

答案 1 :(得分:0)

我遇到了类似的问题,这是由我的映射配置中的缺少键引起的(我只有一个键,而不是复合词,应该是这样)。

以为我会分享答案,因为我的问题很相似,但我的解决方案有点不同。

简而言之,我的上下文类和配置如下所示:

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 });
    }
}