1

使用 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();
            }
        }
    }
4

2 回答 2

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

于 2013-03-10T20:26:21.873 回答
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 });
    }
}
于 2013-10-16T08:00:50.313 回答