我有一個類(項目),代表一個有點大的數據庫表。除了一個子類(ProjectUses,它代表與Project有1:1關係的另一個DB表)之外,我只需要檢索大約十幾列。我能夠使用如下所示的投影來很好地獲取Project對象的單個列,但是我也遇到了ProjectUses子類填充的項目對象檢索問題。任何人都可以請我指出正確的方向?選擇列和與流利的nhibernate子類
這裏是我使用的庫代碼:
public Project GetProjectDebenture(int pkProjectID)
{
var proj = _session.CreateCriteria(typeof(Project))
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("pkProjectID"), "pkProjectID")
.Add(Projections.Property("ReservePercentage"), "ReservePercentage")
.Add(Projections.Property("FundingFeePercentage"), "FundingFeePercentage")
.Add(Projections.Property("PackagingFeePercentage"), "PackagingFeePercentage")
)
.SetResultTransformer(Transformers.AliasToBean(typeof(Project)))
.Add(Restrictions.Eq("pkProjectID", pkProjectID))
.UniqueResult<Project>();
return proj;
}
return null;
}
我一直在使用Projections.Property("ProjectUses")
和Projections.GroupProperty("ProjectUses")
檢索填充的子類試過,但沒有成功。
及以下的類和映射定義
// Project class
public partial class Project
{
public int pkProjectID { get; set; }
public decimal ReservePercentage { get; set; }
public decimal FundingFeePercentage { get; set; }
public decimal PackagingFeePercentage { get; set; }
public ProjectUses ProjectUses { get; set; }
}
// ProjectUses class
public partial class ProjectUses
{
public int pkProjectID { get; set; }
public Project Project { get; set; }
...
}
// Project mapping
public class ProjectMap : ClassMap<Project>
{
public ProjectMap()
{
Table(@"Project");
LazyLoad();
Id(x => x.pkProjectID)
.Column("pkProjectID")
.Not.Nullable()
.GeneratedBy.Identity();
...
HasOne<ProjectUses>(x => x.ProjectUses)
.PropertyRef(r => r.Project)
.Cascade.All();
}
}
// Project Uses mapping
public class ProjectUsesMap : ClassMap<ProjectUses>
{
public ProjectUsesMap()
{
Table(@"ProjectUses");
LazyLoad();
Id(x => x.pkProjectID, "pkProjectID").GeneratedBy.Foreign("Project");
HasOne<Project>(x => x.Project)
.Constrained()
.ForeignKey()
.Cascade.None();
...
}
}
我結束了這個方法。這是一個棘手的問題,讓一些映射工作以防止出現「給定類標識符的多行」錯誤。就像你說的那樣,創建一個新的域對象允許我將所有類似的信息(來自多個表)集中到一個地方,所以現在任何與數字或金錢有關的事情都被封裝在自己的類中。 – Brett 2013-04-16 15:09:08