0

やや大きなDBテーブルを表すクラス(プロジェクト)があります。サブクラス(ProjectUses、Projectと1:1の関係を持つ別のDBテーブルを表す)に加えて、約12個の列のみを取得する必要があります。以下に示すように、プロジェクションを使用してProjectオブジェクトの単一列を問題なく取得できますが、ProjectUsesサブクラスが設定されたProjectのオブジェクトを取得する際にも問題が発生します。誰かが私を正しい方向に向けてくれませんか?

これが私が使用しているリポジトリコードです:

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();

        ...
    }
}
4

2 に答える 2

0

ProjectMapクラスで使用.Not.LazyLoad()してみましたか?

于 2013-03-25T20:25:15.840 に答える
0

必要なすべてのプロパティを使用してDTOを作成し、新しいDTOProjectとの間でプロジェクトを行うことができます。ProjectUsesこれには、ビューモデルをドメインモデルから分離するという追加の利点があります。

于 2013-03-25T22:25:50.680 に答える