2015-09-16 77 views
0

ASP.NET Identity開發人員應該識別出我的重命名的ApplicationUser類(現稱爲User),該類是從具有基於Guid的Id屬性的IdentityUser派生而來的。在我的User類中,我有一個可選的自引用外鍵(public Guid?ManagerId)和一個簡單的匹配導航屬性(公共用戶管理器)。所有的工作。我的問題是我想要第二個導航屬性(DirectlyManagedUsers),我無法弄清楚如何對它進行註釋,以便它將包含此用戶的直接管理用戶的集合。我會很感激一些幫助。我可以使用可選外鍵具有自引用逆導航屬性嗎?

這裏是我的用戶等級:

public class User : IdentityUser 
{ 
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager, string authenticationType) 
    { 
     var userIdentity = await manager.CreateIdentityAsync(this, authenticationType); 
     return userIdentity; 
    } 

    public User() : base() 
    { 
     DirectlyManagedUsers = new List<User>(); 
    } 

    public User(string userName) : base(userName) 
    { 
     DirectlyManagedUsers = new List<User>(); 
    } 

    [ForeignKey(nameof(Manager))] 
    public Guid? ManagerId { get; set; } 

    [ForeignKey(nameof(ManagerId))] 
    public User Manager { get; set; } 

    [InverseProperty(nameof(Manager))] 
    public ICollection<User> DirectlyManagedUsers { get; set; } 
} 

我得到的模型生成以下錯誤:

One or more validation errors were detected during model generation: 

User_DirectlyManagedUsers_Source_User_DirectlyManagedUsers_Target: : The types of all properties in the Dependent Role of a referential constraint must be the same as the corresponding property types in the Principal Role. The type of property 'ManagerId' on entity 'User' does not match the type of property 'Id' on entity 'User' in the referential constraint 'User_DirectlyManagedUsers'. The type of property 'ManagerId' on entity 'User' does not match the type of property 'Id' on entity 'User' in the referential constraint 'User_DirectlyManagedUsers'. 

我知道有可空Guid類型的經理ID做。那麼我該怎麼做?

+0

如果您更喜歡使用'Guid',則可以隨時更改Id類型。我回答了[問題](http://stackoverflow.com/a/24764152/219406)[夫婦](http://stackoverflow.com/a/30643391/219406),它可能會幫助你。 – LeftyX

回答

0

好吧,我想清楚發生了什麼問題。我使用可空的Guid(Guid?)作爲我的ManagerId的類型。實際上,在ASP.NET Identity框架中,預構建的Entity Framework IdentityUser類使用其Id屬性的字符串類型。該字符串屬性設置爲使用.ToString()轉換爲字符串的新Guid的值。一旦我知道了(因爲我知道該字符串可以爲空),我只是將我的ManagerId屬性的類型更改爲字符串,並且一切正常。所以我的問題是通過在Identity框架中找出正確的類型來解決的,而不是通過爲實體框架以不同的方式註釋該屬性。我很好奇,如果任何人都可以回答原來的問題,如果Id不是可空類型。

相關問題