2

我有一个文件表:

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;}
}

每个 Document 都有一个对应的 DepthDocument。两个表的行数相同。我试图告诉 EF - 当我删除文档时 - 我还想删除相应的 DepthDocument。我认为其中一部分是创建 1-1 关系,我尝试通过将其添加到 Document 类中:

    [Required]
    public virtual DepthDocument DepthDocument { get; set; }

然后这个:

modelBuilder.Entity<Document>()
        .HasRequired(c => c.DepthDocument).WithRequiredPrincipal()
        .WillCascadeOnDelete(true);

但我得到:

如果引用列“DepthDocument.DepthDocumentId”是标识列,则无法创建级联外键“FK_dbo.DepthDocument_dbo.Document_DepthDocumentId”。

我究竟做错了什么?

更新:

我有 DocumentId 和 DepthDocumentId 列,因为我现在正在创建 DepthDocument 表,并且我需要在种子方法中为每个 Document 创建一个新的 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();
        }
4

1 回答 1

1

更改DepthDocument为如下所示:

public class DepthDocument
{
[Key]
public int DocumentId {get; set;}
public int Depth {get; set;}
}

由于它是 1:1 的关系并且DepthDocument没有匹配就不能存在,Document因此没有任何理由DepthDocument使用不同的密钥。

于 2013-07-21T00:43:11.123 回答