背景
在使用ninject的ASP.NET MVC 2项目中使用fluent nhibernate 1.1(使用linq to nhibernate实现存储库)。
我有一个地图课(
Station
)与另一个映射类的集合(
Report
)我也想要
车站
拥有便利财产(
MostRecentReport
)它返回
报告
为此
车站
具有最新的时间戳。
部分模式
Stations
--------
Id
Reports
---------
Id
StationId
Timestamp
部分代码
public abstract class Entity
{
public virtual int Id { get; private set; }
}
public class Station : Entity
{
public virtual IList<Report> Reports { get; private set; }
public Station()
{
Reports = new List<Report>();
}
}
public class Report : Entity
{
public virtual Station Station { get; set; }
public virtual DateTime Timestamp { get; set; }
}
public StationMap : ClassMap<Station>
{
public StationMap()
{
Id(s => s.Id);
HasMany<Report>(s => s.Reports)
.Table("Reports")
.KeyColumn("StationId");
}
}
public ReportMap : ClassMap<Report>
{
public ReportMap()
{
Id(r => r.Id);
References<Station>(r => r.Station, "StationId");
Map(r => r.Timestamp);
}
}
我天真地尝试添加返回的未映射属性
Reports.OrderByDescending(r => r.Timestamp).FirstOrDefault()
但这导致“无法解决财产问题:mostrecenterport”
NHibernate.QueryException
S(即使我没有使用自动映射)。我还尝试将其实现为具有相同返回的方法,但这会导致“索引超出范围”异常。
是否有一种方法可以使它与属性(首选)或方法方法一起工作?或者有什么方法可以把它映射到
Formula()
也许吧?
更新
流畅的NHibernate配置(发生在我的
NinjectModule
实施
Load
重写):
ISessionFactory sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(Settings.ConnectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Domain.Station>())
.BuildSessionFactory();