当尝试使用一对多关系保存两个新实体时,我收到以下错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
我使用的是EF v6.1.3
以下是代码示例:
var entity = _dbContext.Set<EntityA>().Create();
entity.Identifier = 1234;
entity.Title = "Test Title";
entity.Description = "Test Description";
_dbContext.Set<EntityA>().Add(entity);
var relatedEntity = _dbContext.Set<EntityB>().Create();
relatedEntity.Identifier = "123-1234";
relatedEntity.Title = "Test Title";
relatedEntity.Statement = "Sample Statement";
relatedEntity.Entity = entity;
_dbContext.Set<EntityB>().Add(relatedEntity);
_dbContext.SaveChanges();
我可以解决这个错误的唯一方法是在创建相关实体之前调用_dbContext.SaveChanges();
。
非常感谢任何帮助。
修改
以下是表格的SQL:
CREATE TABLE [dbo].[EntityA]
(
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Identifier] NVARCHAR (100) NULL,
[Title] NVARCHAR(100) NULL,
[Description] NVARCHAR (2000) NULL
)
CREATE TABLE [dbo].[EntityB]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Identifier] NVARCHAR (100) NULL,
[Title] NVARCHAR(100) NULL,
[Statement] NVARCHAR (2000) NOT NULL,
[EntityAId] INT NOT NULL,
CONSTRAINT [FK_EntityB_EntityA] FOREIGN KEY ([EntityAId]) REFERENCES [EntityA]([Id])
)
以下是OnModelCreating
配置:
modelBuilder.Entity<EntityA>()
.HasMany(e => e.RelatedEntities)
.WithRequired(e => e.EntityA)
.HasForeignKey(e => e.EntityAId);
以下是实体类:
[Table("EntityA")]
public class EntityA
{
public int Id { get; set; }
public string Identifier { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public virtual IList<EntityB> RelatedEntities { get; set; }
}
[Table("EntityB")]
public class EntityB
{
public int Id { get; set; }
public int EntityAId { get; set; }
public string Identifier { get; set; }
public string Title { get; set; }
public string Statement { get; set; }
}
答案 0 :(得分:0)
当您创建Entity2时,Entity(1)尚未出现在数据库中,而Entity2需要有1个可用于创建自身。你做正确的事情来调用SaveChanges()来首先创建实体(1)。