EF - 一对多??

时间:2017-01-22 17:59:17

标签: .net database entity-framework ef-code-first

EF: 6.0 .NET: 4.5.2 VS2015

我一定不理解某事。经过研究,我似乎无法正确对齐。这是一些缩写相关的代码:

public class ApplicationUser
{
    public ICollection<MailGroup> MailGroups { get; set; }
}

public class MailGroup
{
    public int Id { get; set; }
    public string FromUserId {get; set; }
    [ForeignKey("FromUserId")]
    public ApplicationUser FromUser { get; set; }

    public ICollection<ApplicationUser> Subscribers { get; set; }
}

使用这段代码,我最终得到一对多的表格,如下所示:

AspNetUsers

MailGroup_Id (FK)

MailGroup

FromUser_Id (FK)
ApplicatoinUser_Id (FK)

这似乎意味着ApplicationUser可以是一个MailGroup的一部分,因为它是MailGroup的单个FK,我确信其意义是为每个邮件组生成一个ApplicationUser,但这不是理想的行为。

目标是向正确的用户提供FromUser点,并为MailGroup提供多个订阅者。

正确解决这个问题的任何指导意见?

1 个答案:

答案 0 :(得分:1)

根据我的理解,一个Appuser可以有多个mailgroup,每个mailGroup应该至少有一个应用程序用户。这是我的实体类。请看看。让我知道这是你想要的还是我误解的。

      public class ApplicationUser
        {
            public int ID { get; set; }
            public ICollection<MailGroup> MailGroups { get; set; }
        }

        public class MailGroup
        {
            public int Id { get; set; }
            public ApplicationUser FromUser { get; set; }
            public ICollection<ApplicationUser> Subscribers { get; set; }
        }

你唯一需要做的就是过度使用模型创建方法来告诉EF这个。

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<ApplicationUser>().HasMany(s => s.MailGroups).
            WithRequired(u => u.FromUser)   ;
    }

当我在up方法之后添加新的迁移

       public override void Up()
            {
                CreateTable(
                    "dbo.ApplicationUsers",
                    c => new
                        {
                            ID = c.Int(nullable: false, identity: true),
                            MailGroup_Id = c.Int(),
                        })
                    .PrimaryKey(t => t.ID)
                    .ForeignKey("dbo.MailGroups", t => t.MailGroup_Id)
                    .Index(t => t.MailGroup_Id);

                CreateTable(
                    "dbo.MailGroups",
                    c => new
                        {
                            Id = c.Int(nullable: false, identity: true),
                            FromUser_ID = c.Int(nullable: false),
                        })
                    .PrimaryKey(t => t.Id)
                    .ForeignKey("dbo.ApplicationUsers", t => t.FromUser_ID, cascadeDelete: true)
                    .Index(t => t.FromUser_ID);

            }