我在後端使用NHibernate的ActiveRecord。我爲用戶建立了一個映射;我可以創建/檢索/註冊用戶沒有任何問題。無法通過NHibernate/ActiveRecord將字段保存到Aspnet_Users
我現在想爲我的用戶(每個角色許多用戶)添加一個名爲Role
的關聯。我創建了合適的Role
類,表格,數據等等,並且所有內容似乎都在爲此而努力。
問題是,當我保存用戶並關聯Role
時,該關聯不會持續到數據庫。
我已將RoleId (int16)
列添加到aspnet_Users
表中以匹配角色表的Id (int16)
列。我試過用Save
和SaveAndFlush
沒有成功。
下面是一些代碼:
Role superUser = Role.First(r => r.name == "Super User");
User me = User.First(r => r.UserName == myUserName);
me.Role = superUser;
me.Save(); // Or: SaveAndFlush
調試時,我可以看到,當他們保存的對象的關聯(即me.Role
不爲空,並有正確的屬性/屬性/等)但是,當我查看數據庫時,該用戶的RoleId
值仍然是NULL
。 (SaveAndFlush
沒有什麼區別。)
我錯過了什麼?
我讀過SO上的某個地方,擴展用戶表通常是通過添加另一個表並通過外鍵鏈接兩個表完成的;我假設這些類將使用新的ExtendedUser
類的構圖繼承。假設我不想走這條路線,爲什麼這不起作用?是否因爲特定的ASP.NET MVC存儲過程等。所有?
一些相關的映射:
[ActiveRecord("aspnet_Users", Mutable = false)]
public class User : ActiveRecordLinqBase<User>
{
[PrimaryKey(PrimaryKeyType.Assigned)]
public Guid UserId { get; set; }
// ...
[BelongsTo("RoleId", Cascade = CascadeEnum.SaveUpdate)]
public Role Role { get; set; }
}
[ActiveRecord]
public class Role : ActiveRecordLinqBase<Role>
{
[PrimaryKey]
public int Id { get; set; }
// ...
[HasMany(Inverse = true)]
public IList<User> Users { get; set; }
[Property]
public string Name { get; set; }
}
我在User.Role上添加了'Cascade = CascadeEnum.SaveUpdate',但我仍然看到相同的行爲。 – ashes999
如果你改變你的用戶實體(這不是引用)的一些其他屬性,它是否持續到數據庫? – Eduard
等一下,我看到有什麼不對:mutable =「false」 - 這顯然表明該實體是隻讀的。 – Eduard