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; }
}
使用这段代码,我最终得到一对多的表格,如下所示:
MailGroup_Id (FK)
FromUser_Id (FK)
ApplicatoinUser_Id (FK)
这似乎意味着ApplicationUser可以是一个MailGroup的一部分,因为它是MailGroup的单个FK,我确信其意义是为每个邮件组生成一个ApplicationUser,但这不是理想的行为。
目标是向正确的用户提供FromUser
点,并为MailGroup
提供多个订阅者。
正确解决这个问题的任何指导意见?
答案 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);
}