我有一个 ApplicationUser 模型:
public class ApplicationUser : IdentityUser
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public List<Project> Projects { get; set; }
}
...和一个项目模型:
public class Project
{
public int Id { get; set; }
public int? ParentProjectId { get; set; }
[Required]
public string ProjectCreatorId { get; set; }
[Required]
public string ProjectOwnerId { get; set; }
public string Title { get; set; }
public DateTime Created { get; set; }
public ApplicationUser ProjectCreator { get; set; }
public ApplicationUser ProjectOwner { get; set; }
public Project ParentProject { get; set; }
public virtual List<Project> ChildProjects { get; set; }
}
在OnModelCreating(),我试过这个:
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Project>()
.HasMany(c => c.ChildProjects)
.WithOne(p => p.ParentProject)
.HasForeignKey(p => p.ParentProjectId);
modelBuilder.Entity<ApplicationUser>()
.HasMany(p => p.Projects)
.WithOne(o => o.ProjectOwner)
.HasForeignKey(po => po.ProjectOwnerId);
modelBuilder.Entity<ApplicationUser>()
.HasMany(p => p.Projects)
.WithOne(c => c.ProjectCreator)
.HasForeignKey(pc => pc.ProjectCreatorId);
但是在创建数据库时,我得到
无法在“ApplicationUser.Projects”和“Project.ProjectCreator”之间创建关系,因为“ApplicationUser.Projects”和“Project.ProjectOwner”之间已经存在关系。导航属性只能参与单个关系。
我尝试了这个老问题的解决方案,但无法使它们中的任何一个起作用。
有没有另一种方法可以同时跟踪 aProject的创建者和所有者,并能够.Include()在查询中同时跟踪它们?