Конфликт моделирования класса домена

У меня есть класс UserProfile

 public class UserProfile
{
    public UserProfile()
    {
    }

    public UserProfile(string userId)
    {
        AppUserId = userId;
    }

    [Key]
    public int UserProfileId { get; set; }

    public string AppUserId { get; set; }
    public ICollection<Blog> AuthoredBlogs { get; set; }
    public ICollection<Blog> SubscribedBlogs { get; set; }

    //other properties removed for brevity
}

И связанный класс блога

 public class Blog
{
    [Key]
    public int BlogId { get; set; }

    [ForeignKey("BlogAuthor")]
    [Index("IX_AuthorIndex", 1, IsClustered = false, IsUnique = false)]
    public int AuthorId { get; set; }

    [Required]
    public Author BlogAuthor { get; set; }

    [Required(ErrorMessage = "A blog name is required")]
    public string BlogName { get; set; }

    public string BlogIconUrl { get; set; }
    public List<BlogPost> BlogPosts { get; set; }

    public EquipmentCategory EquipmentCategory { get; set; }       
    public EquipmentType EquipmentType { get; set; }

    public ICollection<int> BlogReaderIds { get; set; }

    public Blog(string name, Author author)
    {
        BlogName = name;
        BlogAuthor = author;
        EquipmentType = EquipmentType.NoSearch;
        EquipmentCategory = EquipmentCategory.NoSearch;
    }

    public Blog()
    {
        EquipmentType = EquipmentType.NoSearch;
        EquipmentCategory = EquipmentCategory.NoSearch;
    }
}

Мне трудно понять, как смоделировать две коллекции в UserProfile (AuthoredBlogs и SubscribeedBlogs) с классом Blog. Наличие этих двух коллекций в UserProfile потребует двух связей FK с Blog, но я просто не понимаю, как это может / должно работать.

UserProfile может подписаться и создать множество блогов. Но у класса Blog может быть только один автор и либо список подписанных UserProfiles, либо, как у меня здесь, список UserProfileId подписчика.

Я не могу заставить его работать, первые обновления кода не удается развернуть на БД из-за проблем с ассоциацией FK.

Любая помощь приветствуется.

1 ответ

Решение

Эти аннотации моделей создадут отношение "один ко многим" между автором и блогами и отношение "многие ко многим" между блогами и подписчиками через автоматически созданную теневую таблицу.

public class UserProfile
{
    //other stuff...

    [InverseProperty("Autor")]
    public ICollection<Blog> AuthoredBlogs { get; set; }
    [InverseProperty("SubscribedUserProfiles")]
    public ICollection<Blog> SubscribedBlogs { get; set; }   
}

public class Blog
{
    //other stuff..

    public ICollection<UserProfile> SubscribedUserProfiles { get; set; }        

    public UserProfile Autor { get; set; }
    [ForeignKey("Autor")]
    public int AutorId { get; set; }
}
Другие вопросы по тегам