【发布时间】:2010-07-27 23:52:02
【问题描述】:
背景
在使用 Ninject 的 ASP.NET MVC 2 项目中使用 Fluent NHibernate 1.1(使用 LINQ to NHibernate 实现存储库)。
我有一个映射类 (Station) 和另一个映射类 (Report) 的集合。我还希望 Station 有一个便利属性 (MostRecentReport),它返回带有最新时间戳的 Station 的 Report。
部分架构
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() 的未映射属性,但这会导致“无法解析属性:MostRecentReport”NHibernate.QueryExceptions(即使我没有使用自动映射)。我也尝试将其实现为具有相同返回的方法,但这会导致“索引超出范围”异常。
有没有办法让它与属性(首选)或方法方法一起工作?或者有什么方法可以用Formula() 映射它?
更新
Fluent NHibernate 配置(发生在我的NinjectModule 实现的Load 覆盖):
ISessionFactory sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(Settings.ConnectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Domain.Station>())
.BuildSessionFactory();
【问题讨论】:
-
让我们看看配置 NHibernate 的代码。自动地图可能潜伏在某处。
-
使用 Fluent NHibernate 配置更新问题。
标签: c# fluent-nhibernate