Nhibernate Nhibernat映射aspnet_用户表

Nhibernate Nhibernat映射aspnet_用户表,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我要映射到aspnet_用户的我的用户表: <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"

我要映射到aspnet_用户的我的用户表:

<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_用户表:

<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”

如何通过User中的UserId列创建从User到aspnet_User的单向映射

我只想创建一个引用,这样我就可以提取只读信息、影响排序等。我仍然需要像现在一样在用户设置中保留UserId列。可能是一个虚拟引用键入了UserId?这对Nhibernate有可能吗

不幸的是,它的行为就像它只想使用用户ID映射到aspnet_用户。此时,将表用户的主键更改为UserId而不是ID不是一个选项


任何帮助都将不胜感激。提前感谢。

Aspnet\u用户表具有Guid类型的主键

表用户的主键类型为Int32

您可以查看这一点,因为您的用户表对aspnet_users表有一个一对一的引用

但是,如果你看aspnet_users表,就好像它是一个分配给用户的“价值篮子”,就像你有一种类型的用户管理员、版主,…,但那将是多对一引用,许多用户有一种类型,你可以这样映射它

因此:

映射将使用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);
      }
  }

为了获得更多关于这方面的指导,请查看该项目。他们已经创建了一个完整的成员资格提供程序实现,它在幕后使用NHibernate。

另一方面,您应该尝试使用Fluent NHibernate来替换手动编写的XML映射,这使映射内容更加简单,尤其是如果您是NHibernate新手,那么您可以尝试使用映射XML。
  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);
      }
  }