asp.net - 尝试使用 DbContext 通过 .Add() 方法保存时获取 "Cannot insert the value NULL into column"。请检查我的 POCO 和保存方法

标签 asp.net asp.net-mvc-3 entity-framework entity-framework-4 entity-framework-4.1

首先使用代码,所有内容似乎都与下面的内容不同,之前当我使用 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; }


}

最佳答案

使用StoreGeneratedAttributePCBuild.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/

相关文章:

asp.net-mvc - Code First 中的一对多关系

asp.net - 避免 SQL Server 中的盲 SQL 注入(inject)漏洞的最佳实践 - ASP.Net

asp.net - css 表格高度始终相同

c# - asp.net 计时器和 response.redirect

c# - 传递给 Controller ​​操作的参数

c# - 这是在我的 MVC 3 ModelBinder 中适当使用服务定位器模式吗?

c# - ASP.NET C# - 源文件分析错误 - 无法加载继承类型文件

asp.net-mvc-3 - 自定义 Razor View 基类和依赖项注入(inject)

c# - Entity Framework - 重复处理

c# - DbFunctions.DiffDays() 结果为 : This function can only be invoked from LINQ to Entities