【问题标题】:NHibernate - 12 Months / 1 Year and DataBindingNHibernate - 12 个月/1 年和数据绑定
【发布时间】:2009-03-11 17:17:08
【问题描述】:

处理此问题的最佳方法是什么?我有一个应用程序,我经常需要将 12 个月的记录“透视”到一年的记录/对象中,以便能够在 DataGrid 中每行显示一年。到目前为止,我一直在 DataSets 中使用一些丑陋的 T-SQL 来完成这项工作,以使枢轴发生。

我现在正在将此应用程序升级到 NHibernate,这是我遇到的一个问题。

例如,假设我有一个测试,我每月给一组学生做一次测试。 我的 DDL 可能如下所示:

CREATE TABLE [Score](
    [ScoreId] [int] IDENTITY(1,1) NOT NULL,
    [StudentId] [int] NOT NULL,
    [Year] [int] NOT NULL, -- 4 digit year as an int
    [Month] [int] NOT NULL, -- 1 through 12 month value as int
    [TestScore] [int] NOT NULL
)  

我想在 DataGrid 中显示这些字段(每个学生/年一条记录):
学生姓名,年份,一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月

使用 NHibernate 处理此类任务的正常方法是什么? 你会怎么处理呢?

【问题讨论】:

    标签: .net nhibernate data-binding datagrid nhibernate-mapping


    【解决方案1】:

    在我看来,最好将 NHibernate 用作纯 ORM,并将转轴留给您的代码。这意味着使用 NHibernate 将表中的行原样读取到与表列具有一对一关系的类中,然后使用类上的方法(或 getter 中具有某些逻辑的属性)来进行旋转。

    在纯 DDD 中,您应该使用服务来执行此操作(而不是将此逻辑放入域对象中)。

    在此之后,您可以将结果绑定到网格以进行演示。

    【讨论】:

    • 所以如果我理解你正确地拉出父对象和 12 个子对象(月)并使用服务层之类的东西返回一组更友好的“外观”对象进行绑定?
    • 我问了这个问题后才意识到......如果我没有这个月的问题,但仍然有与一个学生对象相关的每个“度量”怎么办。有没有一种简单的方法可以将它绑定到 DataGrid?以前没有做过这样的父/子或一对一网格。在那个 DataTable/DataSet 世界里待得太久了。
    • 本地数据网格在这方面不是很灵活。我想说,如果你想做主/细节网格之类的东西,请选择更复杂的数据网格控件,例如 Infragistics 或 DevExpress。
    • 我不想做主/细节本身。点语法有效吗?我可以不绑定到 StudentId 而是绑定到 Student.DisplayName 吗?我想我可以编写一个简单的测试项目来尝试一下。
    【解决方案2】:

    我想我会把这个添加到对话中。

    这个thread 讨论了覆盖类的 ToString()。我想我可以为我的 MonthValue 对象执行此操作...只需让它们通过 ToString() 返回分数;

    但是,这并不能解决映射问题。对于这个问题的其他 cmet,点语法在 DataPropertyName 中对我不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2021-07-13
      相关资源
      最近更新 更多