如何设计主列表和子列表架构

时间:2015-05-10 20:23:11

标签: entity-framework database-design ef-code-first

我发现很难为列表功能设计数据库架构。将有一个主列表,然后可以将其划分为更多列表。

每个用户都可以将候选人标记为最喜欢的候选人,并且可以有很多喜欢的候选人。

如果候选人从列表中删除,那么它应该仍然是收藏夹的一部分,或者是主要的favoirtes列表的一部分而不属于特定的列表。

  • 用户可以将许多候选人标记为收藏
  • 用户可以拥有多个收藏列表
  • 收藏列表可以有很多候选人 以下是我到目前为止所提出的内容。 enter image description here

如上图所示我允许FavouritesListId可以为空,这样如果列表项与某个列表没有关联,这意味着它仍然是有利的,但不是特定列表的一部分。 我想知道这是否是最佳解决方案,或者是否有更好的设计方法。

我猜我的设计有问题,因为当我使用Entity框架映射我的表时,它最终会产生循环依赖,如下所示:

public partial class Model1 : DbContext
    {
        public Model1()
            : base("name=Model1")
        {
        }

        public virtual DbSet<Candidate> Candidates { get; set; }
        public virtual DbSet<FavouritesList> FavouritesLists { get; set; }
        public virtual DbSet<FavouritesListItem> FavouritesListItems { get; set; }
        public virtual DbSet<User> Users { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Candidate>()
                .HasMany(e => e.FavouritesListItems)
                .WithRequired(e => e.Candidate)
                .WillCascadeOnDelete(false);

            modelBuilder.Entity<User>()
                .HasMany(e => e.FavouritesListItems)
                .WithRequired(e => e.User)
                .WillCascadeOnDelete(false);
        }
    }

如上面的代码所示,候选人最终有很多恩惠,这不是我的意图。

0 个答案:

没有答案