我有以下实体
Item
virtual public int serialNumber { get; set; }
virtual public Project idProject { get; set; }
virtual public string type{ get; set; }
Project
virtual public int idProject { get; set; }
virtual public string projectName { get; set; }
virtual public int numDovelas { get; set; }
virtual public IList<Item> lItems{ get; set; }
两个类都已映射,它们工作正常,但我的问题是如何使用一个查询得到一个项目元素,其中lItems已经填充了该项目的项目
更新(在Niyaz回答之后)
我在模型中添加了第三个实体,它代表了一个项目的分析类型,一个项目可以在不同的日期执行多个分析并保存在不同的文件中。所以第三个实体的映射如下
Table("Analysis");
CompositeId()
.KeyReference(x => x.SerialNumber, "serialNumber") // Reference to the Item entity
.KeyProperty(x => x.MeasureDate, "measureDate")
.KeyProperty(x => x.FileName, "fileName");
Map(x => x.Measure1).Column("measure1").Not.Nullable().Default("0");
Map(x => x.Measure2).Column("measure2").Not.Nullable().Default("0");
我已将项目映射添加到以下
HasMany(x=>x.LAnalysis).KeyColumn("serialNumber")
添加关系类型和FK
列但现在我有以下错误
Foreign key (FK9CF1483E7BAABE07:Analysis [SerialNumber])) must have same number of columns as the referenced primary key (Item [SerialNumber, ProjectID])
所以似乎Analysis表必须也有ProjectID,没有办法避免这种情况?或者可以做些什么来避免这个错误
答案 0 :(得分:0)
1)您需要在项目映射中添加对Project的引用(如果您使用的是FluentNhibernate),如下所示:
public class ItemMap: ClassMap<Item>
{
public ItemMap()
{
Id(x => x.serialNumber);
References(x => x.Project, "idProject");//you need to change your property to actual entity, not just Id
Map(x => x.type);
Table("NameOfTable");
}
}
2)你需要指出项目在项目映射中有很多项目
HasMany(x => x.lItems).KeyColumn("serialNumber");
我认为它应该有效。如果没有,您需要使用LINQ获取特定项目的项目列表并将它们分配给该对象