2010-03-31 175 views
1

我是相当新的nhibernate和流利nhibernate,我有一个关联集合查询问题。在数据库中我有一口井,并有4个相关的AFE。我遇到的问题是AFE的集合没有正确填充。无论我做什么,我都会得到4个AFE,但它们都是同一个对象。有什么显而易见的,我做错了。流利的Nhibernate映射问题

谢谢

PS。我没有对数据库的更改访问权限,因此我无法更改数据库以使其成为真正的FK。

家长

public WellHeaderMap() 
    { 
     Table("Well"); 
     Id(x => x.PropertyNumber, "WELL_NUMBER"); 
     Map(x => x.PropertyID, "PROPERTY_ID"); 
     Map(x => x.Name, "WELL_NAME"); 

     //AFEs is a IList<AFE> 
     HasMany(x => x.AFEs).Inverse().KeyColumn("Property_ID").PropertyRef("PropertyID").Fetch.Join(); 
    } 

收集

public AFEMap() 
    { 
     Table("AFE"); 
     Id(x => x.PropertyID, "PROPERTY_ID"); 
     Map(x => x.AFETypeID, "AFE_TYPE_CODE"); 
     Map(x => x.AFENumber, "AFE_NUMBER"); 
     Map(x => x.IsDeleted, "DELETED_IND"); 
    } 

查询

 var wellSearchCriteria = _session.CreateCriteria<WellHeader>() 
      .CreateAlias("AFEs", "afe") 
      .Add(Restrictions.Eq("PropertyNumber", id.ToString())) 
      //.Add(Expression.Eq("afe.AFETypeID", "01")) 
      //.Add(Expression.Eq("afe.IsDeleted", "N")); 
+0

wellHeader.AFEs是否返回相同的4个实体? – mxmissile 2010-03-31 13:47:28

+0

很难确定没有看到你的表结构,类结构和映射。你确定你想把'HasMany'转换为'多对一'吗?我没有看到回到父母的属性来支持这种关系。 – 2010-03-31 15:03:44

+0

是的,wellHeader.AFEs总是返回相同的4.即使我在查询中添加取消注释afe,我应该只返回1 AFE,但它仍然返回4.我想我只是因为示例I找到。如果我离开反向,结果相同。 – SnyderJK 2010-03-31 15:28:19

回答

0

我想你可能也有WellHeader标识错误的,目前你有:

Id(x => x.PropertyNumber, "WELL_NUMBER"); 
Map(x => x.PropertyID, "PROPERTY_ID"); 

大概应该是:

Id(x => x.PropertyID, "PROPERTY_ID"); 
Map(x => x.PropertyNumber, "WELL_NUMBER"); 

的PropertyNumber和属性ID进行切换。然而,如果没有看到你的模式,很难说。

+0

在技术上,它不是桌子本身的主键,我只是随意设置ID来协助映射到我自己的一些桌子。 – SnyderJK 2010-03-31 15:45:21

+0

如果PropertyID不是PK,是否有可能在具有相同PROPERTY_ID的多个井中? – mxmissile 2010-03-31 15:58:55

+0

PROPERTY_ID有一个唯一的约束,我做了一个查询来确保没有属性id重复。 – SnyderJK 2010-03-31 16:06:37