Nhibernat отображение таблицы aspnet_Users - PullRequest
1 голос
/ 31 марта 2010

Моя таблица пользователей, которую я хочу сопоставить с aspnet_Users:

<class name="User" table="`User`">
    <id name="ID" column="ID" type="Int32" unsaved-value="0">
        <generator class="native" />
    </id>

    <property name="UserId" column="UserId" type="Guid" not-null="true" />
    <property name="FullName" column="FullName" type="String" not-null="true" />
    <property name="PhoneNumber" column="PhoneNumber" type="String" not-null="false" />
</class>

Моя таблица aspnet_Users:

<class name="aspnet_Users" table="aspnet_Users">
    <id name="ID" column="UserId" type="Guid" />
    <property name="UserName" column="UserName" type="string" not-null="false" />
</class>

Я попытался добавить отображения один-к-одному, один-ко-многим и многие-к-одному. Самое близкое, что я могу получить, с этой ошибкой: объект типа 'System.Guid' не может быть преобразован в тип 'System.Int32'.

Как создать одностороннее сопоставление пользователя с aspnet_User через столбец UserId пользователя?

Я только хочу создать ссылку, чтобы я мог извлекать информацию только для чтения, влиять на сортировку и т. Д. Мне все еще нужно оставить столбец UserId в настройках пользователя, как сейчас. Может быть, виртуальная ссылка отключает UserId? Это возможно даже с Nhibernate?

К сожалению, он действует так, как будто хочет использовать только ID пользователя для сопоставления с aspnet_Users. Изменение таблицы User, чтобы ее первичный ключ был идентификатором пользователя вместо идентификатора, на данный момент недоступно.

Любая помощь будет принята с благодарностью. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 июля 2010

Чтобы получить дальнейшие рекомендации по этому вопросу, взгляните на проект NHibernateProvider . Они создали реализацию провайдера полного членства, которая использует NHibernate.

0 голосов
/ 01 апреля 2010

Таблица Aspnet_user имеет первичный ключ типа Guid.

Ваша таблица Пользователь имеет первичный ключ типа Int32.

Вы можете посмотреть на это, поскольку ваша пользовательская таблица имеет ссылку (один к одному) на таблицу aspnet_users.

Но если вы посмотрите на таблицу aspnet_users как на «корзину значений», которую можно назначить пользователю (например, если у вас есть тип пользователя (admin, moderator, ...), но это будет Если вы используете ссылку «многие-к-одному» (у многих пользователей один из типов), вы можете отобразить это следующим образом.

Итак:

class User
{
     public virtual int ID { get; set; }
     public virtual Guid UserId { get; set; }
     public virtual string FullName { get; set; }
     public virtual string PhoneNumber { get; set; }   
}

class AspnetUser
{
     public virtual Guid ID { get; set; }
     public virtual string UserName { get; set; }
}

отображение будет (используя fluent.NHibernate):

  public class User_Map : ClassMap<User>
  {
      public User_Map()
      {
           Table("User");
           ID(x => x.ID).GeneratedBy.Native();
           References(x => x.UserId);
           Map(x => x.FullName);
           Map(x => x.PhoneNumber);
      }
  }

  public class AspnetUser_Map : ClassMap<AspnetUser>
  {
      public User_Map()
      {
           Table("aspnet_Users");
           ID(x => x.ID).GeneratedBy.Assigned();
           Map(x => x.UserName);
      }
  }
...