Ошибка множественности при создании базы данных из модели? - PullRequest
0 голосов
/ 07 мая 2011

есть 3 класса:

     public class User
    {
        public Guid Id { get; set; }
        public string Username { get; set; }
        public string PersonelNumber { get; set; }
        public string Password { get; set; }
        public bool IsActive { get; set; }
        public DateTime LastLoginDate { get; set; }
        public bool IsOnline { get; set; }
    }

    public class Comment
    {
        public Guid Id { get; set; }

        /// <summary>
        /// Title of the comment
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        /// Full text for comment
        /// </summary>
        public string Text { get; set; }

        //Maps to the User Id
        public Guid CreatedById { get; set; }

        public virtual User CreatedBy { get; set; }
    }

    public class FileVersion 
    {
        public Guid Id { get; set; }
        public string Path { get; set; }
        public int Version { get; set; }

//Referecne to optional comment        
        public virtual Guid ChangeCommentId { get; set; }
        public virtual Comment ChangeComment { get; set; }
//Referece to user who added a file
        public virtual Guid AddedById { get; set; }
        public virtual User AdddedBy { get; set; }
//Reference to User who may have the file checked out
        public virtual Guid CheckedOutById { get; set; }
        public virtual User CheckedOutBy { get; set; }
}

Я получаю сообщение об ошибке, когда база данных пытается создать связь комментариев между FilVersion и комментариями. Я создал это отображение для класса FileVersion:

HasOptional(f => f.ChangeComment).WithMany().HasForeignKey(f => f.ChangeCommentId).WillCascadeOnDelete(false);

Я не уверен, как настроить сопоставления так, чтобы я не получал ошибку Multiplicity при создании базы данных. FileVersion необходимо указать, кто добавил файл и у кого он может быть извлечен для редактирования.

1 Ответ

0 голосов
/ 07 мая 2011

Проблема в том, что вы не можете определить Comment как необязательный, когда внешний ключ не принимает ноль. Либо измените вашу сущность на:

public class FileVersion 
{
    ...     
    public virtual Guid? ChangeCommentId { get; set; }
    public virtual Comment ChangeComment { get; set; }
    ...      
}

Или измените ваше отображение на:

modelBuilder.Entity<FileVersion>()
            .HasRequired(f => f.ChangeComment)
            .WithMany()
            .HasForeignKey(f => f.ChangeCommentId)
            .WillCascadeOnDelete(false);

То же самое, вероятно, понадобится для CheckedOutBy

...