无法创建级联外键

时间:2013-07-21 00:25:19

标签: c# entity-framework ef-code-first

我有一份文件表:

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表,我需要在种子方法中为每个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();
        }

1 个答案:

答案 0 :(得分:1)

DepthDocument更改为:

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

由于它是1:1的关系而且DepthDocument在没有匹配Document的情况下无法存在,因此DepthDocument没有任何理由可以使用{{1}}一把不同的钥匙。