我对Nhibernate非常陌生,我知道我的问题是什么,但是不确定如何修复它。
问题:用户是通过EmployeeID而不是UserID连接到员工的。这引起了一些问题,因为它带来了不正确的细节。
Employee.hbm.xml
<many-to-one name="User" unique="true" column="UserID" />
User.hbm.xml
<one-to-one name="Employee" foreign-key="EmployeeID" class="Employee" lazy="false" />
Employee.cs
public virtual int EmployeeID { get; set; }
public virtual User User { get; set; } - This is UserID within the actual database
public virtual string EmailAddress { get; set; }
User.cs
public virtual int UserID { get; set; }
public virtual string Username { get; set; }
public virtual string Title { get; set; }
public virtual string Forename { get; set; }
public virtual string Surname { get; set; }
public virtual Employee Employee { get; set; }上面是别人编码的东西,我正试着修复它。我试着改变
<one-to-one name="Employee" foreign-key="UserID" class="Employee" lazy="false" />然而,这仍然会引起问题。
我是不是遗漏了什么?谢谢您的帮助:-)
克莱尔
更新
我希望通过一对一的方式,它将加入UserID,然而它仍在加入EmployeeID。有人有其他想法吗?再次多谢:-)
Employee.hbm.xml
<one-to-one name="User" foreign-key="UserID" class="User" lazy="false" />
User.hbm.xml
<one-to-one name="Employee" foreign-key="UserID" class="Employee" lazy="false" />发布于 2011-05-10 08:14:39
您不应该在 one-to-one 映射中指定任何列名,因为该信息是关系另一端many-to-one映射的一部分。
为了解决您的问题,您应该从foreign-key实体的one-to-one映射中删除User属性:
<one-to-one name="Employee" class="Employee" lazy="false" />NHibernate将使用在Employee实体上定义的many-to-one映射中的信息来构建Employee语句。
注意到,如果一个Employee总是有一个与它相关联的User (即Employee.User属性永远不能是null),那么您应该通过添加constrained属性在one-to-one映射中说明这个事实:
<one-to-one name="Employee" class="Employee" constrained="true" lazy="false" />相关资源:
发布于 2011-06-09 10:10:35
我会在这里使用多对一的关系,因为我知道您可能希望合并用户帐户,而一对一可能会在将员工记录移动到合并用户时造成问题。
如果您认为用户可以拥有多个员工记录,那么这就避免了这个问题。
你有没有尝试过这样的方法:
Employee.hbm.xml
User.hbm.xml
http://ayende.com/blog/3938/nhibernate-mapping-many-to-one
https://stackoverflow.com/questions/5946645
复制相似问题