gpt4 book ai didi

c# - 映射类中的未映射属性 (Fluent NHibernate 1.1)

转载 作者:行者123 更新时间:2023-11-30 21:20:20 25 4
gpt4 key购买 nike

背景

使用 Ninject 的 ASP.NET MVC 2 项目中的 Fluent NHibernate 1.1(使用 LINQ to NHibernate 的存储库实现)。

我有一个映射类 (Station) 和另一个映射类 (Report) 的集合。我还希望 Station 有一个方便的属性 (MostRecentReport),它返回该 StationReport最近的时间戳。

部分模式

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。 QueryException(即使我没有使用自动映射)。我还尝试将其实现为具有相同返回值的方法,但这会导致“索引超出范围”异常。

有没有办法让它与属性(首选)或方法方法一起工作?或者有什么方法可以将它映射到 Formula() 吗?

更新

Fluent NHibernate 配置(发生在我的 NinjectModule 实现的 Load 覆盖中):

ISessionFactory sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(Settings.ConnectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Domain.Station>())
.BuildSessionFactory();

最佳答案

没有理由必须像这样映射一个属性——如果您不进行自动映射,NHibernate 应该忽略它。

我碰巧同意 David 的回答,您可能会破坏领域模型的抽象。

也就是说,我认为答案是您在某处(存储库?)尝试访问此属性的 NHibernate 查询 (HQL/Criteria/LINQ)。也就是说,问题不在映射中,而是在查询数据库/缓存时尝试使用 MostRecentReport

关于c# - 映射类中的未映射属性 (Fluent NHibernate 1.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com