2013-03-10 53 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 }); 
    } 
}