我的用户表我要映射到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'类型。
如何通过User中的UserId列创建从User到aspnet_User的单向映射?
我只想创建一个引用,这样我就可以提取只读信息,影响排序等。我仍然需要在用户设置中保留UserId列,就像现在一样。也许虚拟参考键入了UserId?这对Nhibernate来说是否可能?
不幸的是,它只是想使用来自用户的ID来映射到aspnet_Users。更改表用户将其主键设置为UserId而不是ID此时不是一个选项。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
Aspnet_user表有一个Guid类型的主键。
您的表用户具有Int32类型的主键。
您可以查看此内容,因为您的用户表具有对aspnet_users表的引用(一对一)。
但是如果你看一下aspnet_users表,好像它是一个“一篮子价值”分配给用户(就像你有一种类型的用户(管理员,主持人,...),但那样做是多对一的引用(许多用户都有这种类型)你可以像这样映射它。
所以:
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);
}
}
答案 1 :(得分:0)
要获得有关此问题的进一步指导,请查看NHibernateProvider项目。他们已经创建了一个完整的成员资格提供程序实现,它使用了NHibernate。