[英]Cannot insert the value NULL into column 'ID'
我在使用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();
}
}
}
您需要在列定义中包含“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
。
我有一个类似的问题,由我的映射配置中缺少键 (我只有一个键,而不是复合,因为它本来应该)。
以为我会分享答案,因为我的问题很相似,但我的解决方案有点不同。
简而言之,我的上下文类和配置如下所示:
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 });
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.