NHibernate加入不正确的字段

问题描述:

我对Nhibernate很新,我知道我的问题是不确定如何解决它。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" /> 

但是,这仍然会导致问题。

我错过了什么吗?在此先感谢您的帮助:-)

克莱尔

UPDATE

我是通过使一到一个,它会加入对用户ID希望,但它仍然对加盟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" /> 
+0

您是否尝试过使用'很多,TO-一个'而不是'一对一'? – Rippo 2011-05-10 10:26:19

+0

你的外键在用户身份上如何?这不是主要的吗? – Andrew 2011-06-09 09:58:26

你不应该在一个one-to-one映射指定任何列名,因为这条信息是在关系的另一端的many-to-one映射的一部分。

为了解决您的问题,您应该删除从one-to-one映射foreign-key属性上User实体:

<one-to-one name="Employee" class="Employee" lazy="false" /> 

的NHibernate将使用上Employee实体生成SQL定义的many-to-one映射信息声明。

<one-to-one name="Employee" class="Employee" constrained="true" lazy="false" /> 

注意,如果一个Employee总是具有关联一个User(即Employee.User属性将永远不会null),那么你应该通过增加constrained属性状态在one-to-one映射这个事实

相关资源:

+0

你好恩里科,我已经删除了外键,但它似乎仍然加入用户ID - 雇员ID。我已经查看了代码,它似乎并没有加入EmployeeID - UserID?还有其他建议吗? – ClareBear 2011-05-10 10:02:07

根据您的实体,用户和员工之间没有一对一的关系。请参阅这样的解释:

http://jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/

我认为你需要specifiy您一对一的多到一个代替。

编辑:
我想我可能误解了您的方案。
您可能需要在此处使用property-ref。所以你映射是这样的:

<one-to-one name="Employee" class="Employee" property-ref="User" lazy="false" /> 

请查看以下链接详细:Nhibernate Documentation

也有一个类似的职位上所以这里:one-to-one and specifying column

+0

你好科尔,我确实希望它是一对一的关系。请参阅上面的更新 – ClareBear 2011-06-02 14:27:23

+0

@ClareBear看看我的编辑。 – 2011-06-03 15:08:21

+0

@ClareBear编辑帮助你吗? – 2011-07-18 12:18:33

我会用这里有多对一的关系,因为我知道您可能想要合并用户帐户,并且一对一可能会导致将员工记录移至合并用户时出现问题。

如果你把它看作你的用户可以有多个员工记录那么这可以避免这个问题。

您是否尝试过类似以下内容:

Employee.hbm.xml

User.hbm.xml

http://ayende.com/blog/3938/nhibernate-mapping-many-to-one