尝试使用DbContext使用.Add()方法保存时,"无法将值插入列".请检查我的POCO和保存方法

Las*_*eak 3 asp.net entity-framework entity-framework-4 entity-framework-4.1 asp.net-mvc-3

首先使用的代码和一切似乎与下面的工作分开,当我使用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();
        }
Run Code Online (Sandbox Code Playgroud)

给我:Cannot insert the value NULL into column 'BuildID', table 'C:\USERS\ADMIN\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\NEOCART\NEOCART.WEBUI\APP_DATA\NEODBX.MDF.dbo.PCBuilds'; column does not allow nulls. INSERT fails.在调用SaveChanges之前清楚地设置BuildID的位置.出现调用.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; }


}
Run Code Online (Sandbox Code Playgroud)

Art*_*lev 5

在属性上使用StoreGeneratedAttributePCBuild.BuildID.它不仅是关键而是IDENTITY领域.

更新 实际上,它应该是[DatabaseGenerated(DatabaseGenerationOption.Identity)]注释.上面链接的文章描述了早期的CTP版本.

更新2 等待,密钥是由应用程序生成的,它不是数据库中的标识列?将注释更改为[DatabaseGenerated(DatabaseGenerationOption.None)],重新创建上下文并重新构建应用程序.