【问题标题】:Cannot insert the value NULL into column 'ID'无法将值 NULL 插入“ID”列
【发布时间】:2013-03-10 19:55:49
【问题描述】:

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

【问题讨论】:

  • 抱歉,您是否 100% 确定 ID 设置为自动生成?
  • 我会再次检查 Sql ,我有 Identity = yes, Identity Increment 和 Identity Seed Set ,在 DBML 我有 Auto-Generated = true

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


【解决方案1】:

您需要在列定义中包含“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

【讨论】:

    【解决方案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 });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2020-10-21
      • 1970-01-01
      • 2013-07-06
      • 2011-12-13
      • 2016-07-05
      • 1970-01-01
      相关资源
      最近更新 更多