【问题标题】:Using DataAnnotations with NHibernate在 NHibernate 中使用 DataAnnotations
【发布时间】:2011-02-04 04:42:38
【问题描述】:

为了找到让 Razor 上的日期显示为短日期的最佳方式,我偶然发现了 Data Annotations,它们似乎很不错,能够将额外的元数据附加到我的各种模型中。

这里有一个问题:我正在使用由 Fluent NHibernate 配置的 NHibernate,而 NHibernate 似乎没有将属性传递给它生成的代理类。

有没有办法强制它复制属性,或者我不应该直接在视图中使用我的模型类,而是以某种方式转换模型(T4 模板?)

【问题讨论】:

  • 属性应该是 ViewModel 的一部分,而不是持久性模型。
  • @Phil,自从我发布此消息以来,我已经想到了这一点,但我认为值得获得其他一些意见。我正在考虑使用 AutoMapper 来消除一些苦差事。

标签: nhibernate fluent-nhibernate data-annotations


【解决方案1】:

我建议您将 viewdomain model (nhibernate) 的类分开。使用automapper 从一个翻译到另一个。

【讨论】:

  • 这就是我最终要做的。
  • 不要打扰映射。通过查询 ISession 直接构建您的视图模型,例如 Session.Query.Select(new ViewModel)。它将为您节省大量时间和性能。仅使用 Session.Get 获取完整的域对象以对其进行变异。
【解决方案2】:

您使用的是部分类的 NHibernate 模型吗?如果是这样,您可以创建一个单独的元数据类来用数据注释来装饰它们。我最近遇到了类似的问题,并得到了我的问题here 的答案。基本上,您创建一个与生成的 NHibernate 类同名的部分类。然后,您创建一个与该类具有相同字段的元数据类,适当地装饰它们,然后将该元数据类应用于您创建的分部类,这样即使您重新生成类,您的分部类也不会,并且会保留您的DataAnnotations 周围。

[MetadataType(typeof(PersonMetadata))]
public partial class Person {

}

public class PersonMetadata {

   [Required]
   [Display(Name = "First Name")]
   public string FirstName;
}

来源:Austin Lamb 通过this answer

【讨论】:

  • 不确定您的答案是否解决了原始问题,但元数据类可能同时链接到域和视图模型。
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2011-01-04
  • 1970-01-01
相关资源
最近更新 更多