C#Nhibernate如何将查询加入一对多

时间:2016-06-28 10:17:15

标签: c# nhibernate oracle11g fluent-nhibernate

我是新的NHibernate查询。我有一对多关系的oracle表,如下所述。我已经完成了流畅的nhibernate映射并尝试运行以下查询,但我一直收到错误,说ChInfo_Id无效。任何人都可以帮助我在这里做错了什么。

    var query = Session.QueryOver(() => logAlias)
                    .Inner.JoinQueryOver(()=>logAlias.ChInfo, ()=>chInfoAlias)
                    .Where(()=>logAlias.RegDate.IsBetween(fromDate).And(toDate))
                    .Future<Log>();

    return query.ToList();

表:

Ch_Info

Ch_no
Name

日志

portid
regdate
ch_no

Class和FluentNHibernate映射:

public class Log
{
    public virtual int PortId { get; set; }
    public virtual DateTime Regdate { get; set; }
    public virtual ChInfo ChInfo { get; set; }
}

public class ChInfo
{
    public ChInfo()
    {
        Logs = new List<Log>();
    }

    public virtual string Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Log> Logs { get; set; }        
}

public class LogMap : ClassMap<Log>
{
    public LogMap()
    {
        Table("LOG");

        CompositeId()
            .KeyProperty(x => x.PortId,"portid")
            .KeyProperty(x => x.Regdate, "regdate");

        References(x => x.ChInfo);
    }
}   
public class ChInfoMap : ClassMap<ChInfo>
{
    public ChInfoMap()
    {
        Table("Ch_Info");

        Id(x => x.Id).GeneratedBy.Assigned().Column("Ch_no");
        Map(x => x.Name).Column("Name");
        HasMany(x => x.Logs)
            .Inverse()
            .Cascade.All();
    }
}

1 个答案:

答案 0 :(得分:0)

我通过在LogMap中的引用中指定列名来解决它。

public class LogMap : ClassMap<Log>
{
    public LogMap()
    {
        Table("LOG");

        CompositeId()
            .KeyProperty(x => x.PortId,"portid")
            .KeyProperty(x => x.Regdate, "regdate");

        References(x => x.ChInfo).Columne("Ch_no");
    }
}