无法创建级联外键
本文关键字:级联 创建 | 更新日期: 2023-09-27 18:24:00
我有一个文档表:
public class Document
{
[Key]
public int DocumentId {get; set;}
public string Title {get; set;}
}
我还有一张DepthDocuments:表格
public class DepthDocument
{
[Key]
public int DepthDocumentId {get; set;}
public int DocumentId {get; set;}
public int Depth {get; set;}
}
每个文档都有相应的DepthDocument。两个表的行数相同。我试图告诉EF,当我删除一个文档时,我也想删除相应的DepthDocument。我认为这其中的一部分是创建1-1关系,我已经尝试将其添加到Document类中:
[Required]
public virtual DepthDocument DepthDocument { get; set; }
然后这个:
modelBuilder.Entity<Document>()
.HasRequired(c => c.DepthDocument).WithRequiredPrincipal()
.WillCascadeOnDelete(true);
但我得到了:
级联外键"FK_dbo.DepthDocument_dbo.Document_DpthDocumentId"不能在引用列"DepthDocument.DepthDocumentId"为标识列。
我做错了什么?
更新:
我有DocumentId和DepthDocumentId列,因为我现在正在创建DepthDocument表,并且我需要在种子方法中为每个文档创建一个新的DepthDocument:
foreach (var document in context.Documents.ToList())
{
context.DepthDocuments.AddOrUpdate(
d => d.DocumentId,
new DepthDocument()
{
DocumentId = document.DocumentId, // can I do this? I tried and ran into problems with missing entries not getting added
// other props
});
context.SaveChanges();
}
将DepthDocument
更改为如下所示:
public class DepthDocument
{
[Key]
public int DocumentId {get; set;}
public int Depth {get; set;}
}
由于这是一个1:1的关系,如果没有匹配的Document
,DepthDocument
就不可能存在,那么DepthDocument
就没有任何理由使用不同的密钥。