Entity Framework一对一或零对自己
Entity Framework One to One or Zero to Itself
我觉得这是我以前想过的事情,但现在好几天都想不通了。
我所追求的很简单,一个给定的用户可能与嵌套在其内部的其他用户有多种关系。
public class ApplicationUser : IdentityUser
{
public virtual ApplicationUser Approver { get; set; }
public virtual ApplicationUser Provider { get; set; }
}
不会出现关于哪一端是委托人和家属等的错误。
给定用户可能没有批准人,也可能没有。
我觉得派生 classes:
public class Provider: ApplicationUser
{
public virtual List<ApplicationUser> Clients{ get; set; }
}
这会使 ApplicationUser 变成这样:
public class ApplicationUser : IdentityUser
{
public virtual Approver Approver { get; set; }
public virtual ProviderProvider { get; set; }
}
有
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Provider> Providers { get; set; }
public DbSet<Approver> Approvers { get; set; }
}
但是与共享相同 properties/ids 的派生 class 的 ForeignKey 属性混淆了。
我进行了很多搜索,但大多数帖子都与 ApplicationUser 相关,该 ApplicationUser 与另一个 class(例如 AddressInfo)具有一对一或零关系。我需要它与 Code First 相同的嵌套 class,尽可能支持流畅的属性。
对此的不同尝试提供了各种不同的错误,太多不同的场景无法列出各种错误。
感谢您的任何建议!
请详细阅读 EF 中的继承策略,例如 here。
如果您只想添加用户之间的关系并且所有用户都将具有相同的属性,那么您不需要使用任何继承,但您需要帮助 EF 理解您在做什么:
public class ApplicationUser
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ApplicationUser Provider { get; set; }
public virtual List<ApplicationUser> Clients { get; set; }
public virtual ApplicationUser Approver { get; set; }
public virtual List<ApplicationUser> Candidates { get; set; }
}
public class ApplicationDbContext : DbContext
{
public DbSet<ApplicationUser> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().HasOptional(e => e.Approver).WithMany(e=>e.Candidates);
modelBuilder.Entity<ApplicationUser>().HasOptional(e => e.Provider).WithMany(e =>e.Clients);
}
}
我觉得这是我以前想过的事情,但现在好几天都想不通了。 我所追求的很简单,一个给定的用户可能与嵌套在其内部的其他用户有多种关系。
public class ApplicationUser : IdentityUser
{
public virtual ApplicationUser Approver { get; set; }
public virtual ApplicationUser Provider { get; set; }
}
不会出现关于哪一端是委托人和家属等的错误。 给定用户可能没有批准人,也可能没有。
我觉得派生 classes:
public class Provider: ApplicationUser
{
public virtual List<ApplicationUser> Clients{ get; set; }
}
这会使 ApplicationUser 变成这样:
public class ApplicationUser : IdentityUser
{
public virtual Approver Approver { get; set; }
public virtual ProviderProvider { get; set; }
}
有
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Provider> Providers { get; set; }
public DbSet<Approver> Approvers { get; set; }
}
但是与共享相同 properties/ids 的派生 class 的 ForeignKey 属性混淆了。 我进行了很多搜索,但大多数帖子都与 ApplicationUser 相关,该 ApplicationUser 与另一个 class(例如 AddressInfo)具有一对一或零关系。我需要它与 Code First 相同的嵌套 class,尽可能支持流畅的属性。
对此的不同尝试提供了各种不同的错误,太多不同的场景无法列出各种错误。
感谢您的任何建议!
请详细阅读 EF 中的继承策略,例如 here。
如果您只想添加用户之间的关系并且所有用户都将具有相同的属性,那么您不需要使用任何继承,但您需要帮助 EF 理解您在做什么:
public class ApplicationUser
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ApplicationUser Provider { get; set; }
public virtual List<ApplicationUser> Clients { get; set; }
public virtual ApplicationUser Approver { get; set; }
public virtual List<ApplicationUser> Candidates { get; set; }
}
public class ApplicationDbContext : DbContext
{
public DbSet<ApplicationUser> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().HasOptional(e => e.Approver).WithMany(e=>e.Candidates);
modelBuilder.Entity<ApplicationUser>().HasOptional(e => e.Provider).WithMany(e =>e.Clients);
}
}