我有一张文件表:

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_DepthDocumentId'不能
  在引用列'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的关系,并且DepthDocument如果没有匹配的Document就不会存在,因此DepthDocument没有任何理由使用其他密钥。

08-18 05:40