Я использую ActiveRecord с NHibernate на сервере.Я настроил отображение для пользователей;Я могу создавать / извлекать / регистрировать пользователей без каких-либо проблем.
Теперь я хочу добавить ассоциацию с именем 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 et.все?
Некоторые соответствующие сопоставления:
[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; }
}