Можно ли использовать дочернюю сущность в ключе или ограничении? - PullRequest
0 голосов
/ 30 ноября 2018

Сначала я использую код EF 6. Итак, как показано ниже, у меня есть две связанные сущности.Я хочу, чтобы он был установлен в DocumentVersion, чтобы DocumentId и DocumentVersionNumber были уникальными в комбинации.Таким образом, может быть много записей для DocumentId 1 и лотов для DocumentVersionNumber 1, но только одна запись может иметь как DocumentId 1 , так и DocumentVersionNumber 1. Используя приведенный ниже код, яполучить ошибку при создании миграции из-за dv.Document.DocumentId в предложении HasIndex.Я знаю, что это можно сделать в базе данных, сделав комбинацию уникальной или даже имея сложный первичный ключ.Я мог бы добавить DocumentId к DocumentVersion объекту, но я это мой первый проект с первым кодом и пытаюсь извлечь уроки из него.Можно ли добиться того, что я хочу без , добавив DocumentId исключительно для этой цели?

public class Document
{
    public Document()
    {
        AllVersions = new HashSet < DocumentVersion >();
        History     = new HashSet < DocumentHistory >();
    }

    [ DatabaseGenerated ( DatabaseGeneratedOption.Identity ) ]
    public int DocumentId { get; set; }
    public string Name { get; set; }
    public string Note { get; set; }
    public string Description { get; set; }
    public CheckoutStatus Status { get; set; } = CheckoutStatus.Locked;
    public ICollection < DocumentVersion > AllVersions { get; set; }
    public ICollection < DocumentHistory > History { get; set; }
}

public class DocumentVersion
{
    public DocumentVersion() => History     = new HashSet < DocumentVersionHistory >();

    public DocumentVersion ( byte [ ] content )
    {
        History = new HashSet < DocumentVersionHistory >();
        Content = content;
    }

    public int DocumentVersionId { get; set; }
    public int DocumentVersionNumber {get; set; }
    public string Note { get; set; }
    public PublishingStatus Status { get; set; }
    public byte [ ] Content { get; set; }
    public Document Document { get; set; }
    public ICollection < DocumentVersionHistory > History { get; set; }
}

protected override void OnModelCreating ( DbModelBuilder modelBuilder )
{
    modelBuilder.Entity < Document >().HasKey ( d => new { d.DocumentId } );
    modelBuilder.Entity < DocumentVersion >().HasKey ( dv => dv.DocumentVersionId ).HasIndex ( dv => new { dv.Document.DocumentId, dv.DocumentVersionNumber } );
    ...
}
...