Конфликт моделирования класса домена
У меня есть класс 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; }
}