首先使用代码,所有内容似乎都与下面的内容不同,之前当我使用 ObjectContext 并调用 context.PCBuilds.AddObject(pcBuild) 时也有效,但在切换到 DbContext 后,它给了我错误。
EFDbContext context = new EFDbContext();
public ActionResult Index()
{
PCBuild pcBuild = new PCBuild();
pcBuild.BuildID = 34245;
pcBuild.BuildName = "Test99";
pcBuild.MarkUp = 25;
pcBuild.BDetails = new List<BDetail>();
context.PCBuilds.Add(pcBuild);
//repository.PCBuilds.Attach(pcBuild);
context.SaveChanges();
return View();
}
给我:无法将值 NULL 插入表“C:\USERS\ADMIN\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\NEOCART\NEOCART.WEBUI\APP_DATA\NEODBX.MDF”的“BuildID”列。 dbo.PCBuilds';列不允许为空。 INSERT 失败。
其中 BuildID 在调用 SaveChanges 之前已明确设置。由于某种原因,调用 .Add(pcBuild) 似乎不会添加填充的对象,并且当调用 savechanges 时,它会尝试插入一个空的 PCBuild ?
这是 POCO
public class PCBuild
{
[Key]
public int BuildID { get; set; }
public string BuildName { get; set; }
public string Socket { get; set; }
public decimal? MarkUp {get; set;}
[InverseProperty("PCBuild")]
public virtual ICollection<BDetail> BDetails { get; set; }
}
public class BDetail
{
[Key]
public int LineID { get; set; }
[ForeignKey("PCBuild")]
public int BuildID { get; set; }
[ForeignKey("Product")]
public int ProductID { get; set; }
public bool? IsSelected { get; set; }
[InverseProperty("BDetails")]
public virtual PCBuild PCBuild { get; set; }
[InverseProperty("BDetails")]
public virtual Product Product { get; set; }
}
最佳答案
使用StoreGeneratedAttribute在 PCBuild.BuildID
属性上。它不仅是一个键,而且是 IDENTITY
字段。
更新
Actually ,它应该是 [DatabaseGenerate(DatabaseGenerationOption.Identity)]
注释。上面链接的文章描述了早期的 CTP 版本。
更新2
等等, key 是由应用程序生成的,它不是数据库中的身份列?将注释更改为[DatabaseGenerate(DatabaseGenerationOption.None)]
,重新创建上下文并重建应用程序。
关于asp.net - 尝试使用 DbContext 通过 .Add() 方法保存时获取 "Cannot insert the value NULL into column"。请检查我的 POCO 和保存方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739222/