使用NHibernate获取引用的值

时间:2018-04-11 13:04:16

标签: c# sqlite nhibernate fluent-nhibernate queryover

我有以下实体

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,没有办法避免这种情况?或者可以做些什么来避免这个错误

1 个答案:

答案 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获取特定项目的项目列表并将它们分配给该对象