首先,我知道有很多关于Unable to determine the principal end of an association between the types错误的信息,但是如果我错过了一个遗憾,那么我看到的任何一个都不符合我的问题。

我已经建立了一个实体,该实体最终将两次引用其自身,并且当我将代码放入第一个自我引用时,它的效果很好,而第二个代码的广告一旦中断就可以正常工作。做一些测试,我发现如果我使用他们自己使用的任何一个自我参照,一切都可以正常工作,只有当我添加第二个自我参照时,它才会中断。我用于自引用的代码是:

    [ForeignKey("ManagerID")]
    public User Manager { get; set; }

    //Auditing Fields
    public DateTime DateCreated { get; set; }
    public int? UpdatedByUserID { get; set; }
    public DateTime? DateUpdated { get; set; }
    public DateTime LastAutoUpdate { get; set; }

    [ForeignKey("UpdatedByUserID")]
    public User UpdatedByUser { get; set; }

完整的实体代码块为:
public class User
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public int ADPFileNumber { get; set; }

    [Required]
    public string ADUserName { get; set; }

    public int AirCardCheckInLateCount { get; set; }

    [Required]
    public string Email { get; set; }

    public DateTime? EndDate { get; set; }

    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    public int ManagerID { get; set; }
    public string MobilePhone { get; set; }

    [Required]
    public string Office { get; set; }

    [Required]
    public string Phone { get; set; }

    public decimal PTO { get; set; }
    public DateTime StartDate { get; set; }
    public int VehicleCheckInLateCount { get; set; }
    public int WexCardDriverID { get; set; }

    [ForeignKey("ManagerID")]
    public User Manager { get; set; }

    //Auditing Fields
    public DateTime DateCreated { get; set; }
    public int? UpdatedByUserID { get; set; }
    public DateTime? DateUpdated { get; set; }
    public DateTime LastAutoUpdate { get; set; }

    [ForeignKey("UpdatedByUserID")]
    public User UpdatedByUser { get; set; }
}

我错过了什么导致第二个自我参照中断?

最佳答案

您必须明确指出两个关联的主要结尾。您可以使用最初具有的类来执行此操作,而无需使用逆集合属性:

modelBuilder.Entity<User>()
            .HasOptional(u => u.Manager)
            .WithMany()
            .HasForeignKey(u => u.ManagerID);
modelBuilder.Entity<User>()
            .HasOptional(u => u.UpdatedByUser)
            .WithMany()
            .HasForeignKey(u => u.UpdatedByUserID);

注意ManagerID也应该是int?。如果需要其他用户预先存在,则无法创建任何User。那是鸡和蛋的问题。

关于asp.net - 无法在模型中添加第二个自引用FK,导致无法确定主要终点错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35656105/

10-10 18:20