Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6&x2B;代码优先+;Fluent:错误无法将值NULL插入列';ID';,表';X';列不允许空值_C#_Entity Framework_Fluent - Fatal编程技术网

C# EF6&x2B;代码优先+;Fluent:错误无法将值NULL插入列';ID';,表';X';列不允许空值

C# EF6&x2B;代码优先+;Fluent:错误无法将值NULL插入列';ID';,表';X';列不允许空值,c#,entity-framework,fluent,C#,Entity Framework,Fluent,有很多问题提到了这个错误,我检查了每一个我发现的问题,但是它们与我的问题不一致。在我发现的问题中,大多数情况下,问题是作者愿意手动为实体提供ID,但忘记将“自动生成”选项切换为“关闭” 我的问题恰恰相反。我有几个表都包含一个ID列,该列由数据库自动递增。除一个外,所有的积垢处理都很好 我得到了标题中提到的可怕的例外。我花了两个小时在这上面,但我不知道为什么。一切似乎都很好 这是我的模型: public class House { public int ID { get; set; }

有很多问题提到了这个错误,我检查了每一个我发现的问题,但是它们与我的问题不一致。在我发现的问题中,大多数情况下,问题是作者愿意手动为实体提供ID,但忘记将“自动生成”选项切换为“关闭”

我的问题恰恰相反。我有几个表都包含一个ID列,该列由数据库自动递增。除一个外,所有的积垢处理都很好

我得到了标题中提到的可怕的例外。我花了两个小时在这上面,但我不知道为什么。一切似乎都很好

这是我的模型:

public class House
{
    public int ID { get; set; }
    public string Name {get;set;}
    public DateTime CreationDate { get; set; }

    public int CompanyID { get; set; }
    public virtual BuildingCompany Assignation { get; set; }
    public int? NoteID { get; set; }
    public Note Note { get; set; }
    public int UserID { get; set; }
    public virtual User User { get; set; }
    public int? FileID { get; set; }
    public virtual File File { get; set; }
}
这是映射代码

modelBuilder.Entity<House>().HasKey(r => r.ID);
modelBuilder.Entity<House>().Property(r => r.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<House>().HasRequired(r => r.Company).WithMany(a => a.Houses).HasForeignKey(r => r.CompanyID).WillCascadeOnDelete(false); 
modelBuilder.Entity<House>().HasOptional(r => r.File).WithMany().HasForeignKey(r => r.FileID);
modelBuilder.Entity<House>().HasRequired(r => r.User).WithMany().HasForeignKey(r => r.UserID);
modelBuilder.Entity<House>().HasOptional(r => r.Note).WithRequired(n => n.House);
这对我来说毫无意义,我已经尝试过调试,当我的代码点击上下文的Save方法时,本地缓存包含我使用正确参数创建的实体,但它会抛出以下错误:

错误:无法将值NULL插入列“ID”,表“Houses”列不允许为NULL

作为提醒,我不需要/不想自己设置ID。我希望EF能像对待我的其他桌子一样为我做到这一点。这就是为什么这个问题让我特别困惑的原因

谢谢你的帮助

编辑

这是数据库模式。数据库由EF自动生成。我只在每次模型更改后进行自动迁移。我不涉及这个细节层次

CREATE TABLE [dbo].[Houses] (
    [ID]            INT            NOT NULL,
    [Name]  NVARCHAR (MAX) NULL,
    [CreationDate]     DATETIME       NOT NULL,
    [CompanyID] INT            NOT NULL,
    [NoteID]        INT            NULL,
    [UserID] INT            NOT NULL,
    [FileID]     INT            NULL,
    CONSTRAINT [PK_dbo.Houses] PRIMARY KEY CLUSTERED ([ID] ASC),
    CONSTRAINT [FK_dbo.Houses_dbo.Files_FileID] FOREIGN KEY ([FileID]) REFERENCES [dbo].[Files] ([ID]),
    CONSTRAINT [FK_dbo.Houses_dbo.Users_UserID] FOREIGN KEY ([UserID]) REFERENCES [dbo].[Users] ([ID]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.Houses_dbo.BuildingCompanies_CompaniesID] FOREIGN KEY ([CompanyID]) REFERENCES [dbo].[BuildingCompanies] ([ID])
);


GO
CREATE NONCLUSTERED INDEX [IX_CompanyID]
    ON [dbo].[Houses]([CompanyID] ASC);


GO
CREATE NONCLUSTERED INDEX [IX_UserID]
    ON [dbo].[Houses]([UserID] ASC);


GO
CREATE NONCLUSTERED INDEX [IX_FileID]
    ON [dbo].[Houses]([FileID] ASC);

您的数据库是如何创建的?您确定该列已在服务器上设置为标识吗


如果没有,请尝试删除数据库并重新运行应用程序。

您的数据库是如何创建的?是否确实在服务器上将列设置为identity?首先使用代码自动创建数据库。我不太确定,我将在问题中添加表模式。我不是DB专家,我很难解释其中的某些部分。我没有在您的
创建表
脚本中看到ID上的
标识
。那么我应该如何添加它呢?EF为我创建了整个脚本=/好吧,完成了lol VS使它变得简单。我再试一次,我会回到你身边。但是手动编辑EF创建的数据库是一个好主意吗?
CREATE TABLE [dbo].[Houses] (
    [ID]            INT            NOT NULL,
    [Name]  NVARCHAR (MAX) NULL,
    [CreationDate]     DATETIME       NOT NULL,
    [CompanyID] INT            NOT NULL,
    [NoteID]        INT            NULL,
    [UserID] INT            NOT NULL,
    [FileID]     INT            NULL,
    CONSTRAINT [PK_dbo.Houses] PRIMARY KEY CLUSTERED ([ID] ASC),
    CONSTRAINT [FK_dbo.Houses_dbo.Files_FileID] FOREIGN KEY ([FileID]) REFERENCES [dbo].[Files] ([ID]),
    CONSTRAINT [FK_dbo.Houses_dbo.Users_UserID] FOREIGN KEY ([UserID]) REFERENCES [dbo].[Users] ([ID]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.Houses_dbo.BuildingCompanies_CompaniesID] FOREIGN KEY ([CompanyID]) REFERENCES [dbo].[BuildingCompanies] ([ID])
);


GO
CREATE NONCLUSTERED INDEX [IX_CompanyID]
    ON [dbo].[Houses]([CompanyID] ASC);


GO
CREATE NONCLUSTERED INDEX [IX_UserID]
    ON [dbo].[Houses]([UserID] ASC);


GO
CREATE NONCLUSTERED INDEX [IX_FileID]
    ON [dbo].[Houses]([FileID] ASC);