2013-03-10 173 views
1

我收到异常“无法将值NULL插入列'ID'”当使用Linq to Sql时,我将ID属性留空,但我已将ID设置为空在我的DBML文件中自动生成。这将工作正常,当我没有一个ID插入,让sql自动生成不使用linq。问题是LINQ抛出了一个异常,因为它看到ID是空的,尽管如果LINQ只是让它通过SQL就可以了。不能将值NULL插入'ID'列

[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

不好意思问,但你肯定的ID设置为自动生成100%? – 2013-03-10 19:58:44

+0

我会再次检查Sql,我有身份=是,身份增量和身份种子集,并在DBML我有自动生成=真 – 2013-03-10 20:04:33

回答

3

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

[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为好。

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 }); 
    } 
} 
相关问题