Asp.net core mvc .net core ef保存相关数据导致错误SqlException:无法在表中插入标识列的显式值
下面,我尝试在我的web应用程序中执行相同的操作:Asp.net core mvc .net core ef保存相关数据导致错误SqlException:无法在表中插入标识列的显式值,asp.net-core-mvc,asp.net-core-2.0,ef-core-2.0,Asp.net Core Mvc,Asp.net Core 2.0,Ef Core 2.0,下面,我尝试在我的web应用程序中执行相同的操作: var content = new Content() { IsActive = true, Link = new Link() { DateCreated = Dat
var content = new Content()
{
IsActive = true,
Link = new Link()
{
DateCreated = DateTime.UtcNow,
LinkName = model.Name,
LinkDesc = model.Description,
LinkPath = model.LinkPath,
IsActive = true
}
};
_context.Contents.Add(content);
_context.SaveChanges();
这会引发一个错误:
SqlException:无法在中插入标识列的显式值
当IDENTITY_INSERT设置为OFF时,表“链接”
但如果我这样做,它会起作用:
var content = new Content() {
IsActive = true
}
_context.Contents.Add(content);
_context.SaveChanges();
var link = new Link()
{
DateCreated = DateTime.UtcNow,
LinkName = model.Name,
LinkDesc = model.Description,
LinkPath = model.LinkPath,
IsActive = true,
ContentId = content.ContentId
};
_context.Links.Add(link);
_context.SaveChanges();
content.LinkId = link.LinkId;
_context.SaveChanges();
这些是模型:
public class Content
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ContentId { get; set; }
public int? LinkId { get; set; } = null;
[ForeignKey("LinkId")]
public virtual Link Link { get; set; }
public DateTime DateCreated { get; set; } = DateTime.UtcNow;
public bool IsActive { get; set; }
}
public class Link
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int LinkId { get; set; }
[MaxLength(300)]
public string LinkDesc { get; set; }
[MaxLength(50)]
[Required]
public string LinkName { get; set; }
public DateTime DateCreated { get; set; } = DateTime.UtcNow;
public bool IsActive { get; set; }
[MaxLength(500)]
public string LinkPath { get; set; }
public int ContentId { get; set; }
[ForeignKey("ContentId")]
public virtual Content Content { get; set; }
}
我遗漏了什么吗?为什么第一个代码会尝试将值插入到
LinkId
?为什么在两个方向上都有外键?每个内容只能有一个链接,每个链接只能有一个内容吗?是的,我添加了第二个,试图找出为什么它不能正常工作。假设每个内容可以有多个链接,我将从内容类中删除LinkId和Link字段,并向内容类中添加IEnumerable,以便正确表示您的关系。模型正确后,查看是否仍然存在相同的问题。如果是1到1或0,则某些内容有一个链接,而有些内容没有。在这种情况下,内容应该有一个可为空的LinkId,就像链接导航属性一样,链接不应该有ContentId,但可以有一个IEnumerable导航属性