在asp.net中显示nhiberbate组件

时间:2013-02-21 21:04:41

标签: c# asp.net fluent-nhibernate fluent-nhibernate-mapping

我正在开发一个ASP.NET/C#/fluent nHibernate项目,并且最近发现了我想要实现的Component映射功能。我相信我的类定义和映射文件是正确的,但我很难通过我的服务和/或存储库层检索组件信息,以便在DetailsViewFormView中显示它。

当我使用ObjectDataSource检索信息时,在相应视图中生成的aspx代码将整个组件放在TextBox中:

<asp:TextBox ID="extraTextBox" runat="server" Text='<%# Bind("extra") %>' />

我在网上找到了很多关于如何进行映射的资源,但是未能找到有关正确显示组件的更多指导。任何指导将不胜感激!

// Stripped down classes
public partial class ProjectExtra
{
    private int _test1;
    private int _test2;

    public ProjectExtra() {}

    public virtual int test1 { get { return this._test1; } set { this._test1 = value; } }
    public virtual int test2 { get { return this._test2; } set { this._test2 = value; } }
}

public partial class Project
{
    private int _pkProjectID;
    private ProjectExtra _extra;

    public Project() {}

    public virtual ProjectExtra extra
    {
        get
        {
            return this._extra;
        }
        set
        {
            this._extra = value;
        }
    }
    public virtual int pkProjectID
    {
        get
        {
            return this._pkProjectID;
        }
        set
        {
            this._pkProjectID = value;
        }
    }
}

// stripped down mapping
public class ProjectMap : ClassMap<Project>
{
    public ProjectMap()
    {
        Table(@"Project");
        LazyLoad();
        Id(x => x.pkProjectID)
          .Column("pkProjectID")
          .Access.Property()
          .Not.Nullable()
          .GeneratedBy.Identity();

        Component<ProjectExtra>(x => x.extra, m =>
        {
            // JobsCreatedActual and JobsCreatedEstimate are two integer columns
            // in the Project database table
            m.Map(x => x.test1).Column("JobsCreatedActual");
            m.Map(x => x.test2).Column("JobsCreatedEstimate");
            Not.LazyLoad();
        });
    }
}

1 个答案:

答案 0 :(得分:0)

为此,我最终使用以下格式:

<asp:TextBox ID="extraTextBox" runat="server" 
Text='<%# Eval("extra.test1") %>' />

我已经看到使用完整DataBinder的其他资源,但结果似乎相同:

<asp:TextBox ID="extraTextBox" runat="server" 
Text='<%# DataBinder.Eval(Container.DataItem, "test1"))%>' />

不幸的是,Bind不适用于子类,因此它们仍然需要使用TextBox值等在代码隐藏中构建。