【发布时间】:2012-05-29 19:45:39
【问题描述】:
我刚刚使用 Fluent nHibernate 和自动映射功能对一个小型数据库进行了建模。现在我想知道我如何使用验证。在过去,我用属性装饰了我的类,但这种按惯例自动映射的目的是保持事物清洁。
我确实有几个看起来像这样的覆盖文件:
public class EventMappingOverride : IAutoMappingOverride<Event>
{
public void Override(AutoMapping<Event> mapping)
{
mapping.Map(x => x.EventType, "TypeID").CustomType(typeof(EventType));
mapping.Map(x => x.EventStatus, "StatusID").CustomType(typeof(EventStatus));
mapping.HasMany(x => x.EventDates).KeyColumn("EventID");
}
}
这是我放置验证规则的地方吗?如果是这样,那是什么样的?使用自动映射真的有什么意义吗(如果我的覆盖文件无论如何都要详细说明的话)?
谢谢。
进一步澄清:
我的实体现在看起来像这样:
namespace Business.Data
{
public class Event
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual EventStatus EventStatus { get; set; }
public virtual EventType EventType { get; set; }
public virtual IList<EventDate> EventDates { get; set; }
}
}
我想让它们看起来像这样。只是简单的对象,因此将来我们可以切换或升级 ORM 并仍然拥有这些漂亮干净的对象。
但是,当谈到使用nHibernate Validator(NHContrib 的一部分)时,我不确定如何在不乱扔属性的情况下合并它。我想这更像是一个问题架构。我也可以使用不同的验证框架,但我希望它与 nHibernate 绑定,这样它就不会插入/更新无效记录。任何意见表示赞赏!
【问题讨论】:
-
验证规则是什么意思?你有一个例子吗?我在未经验证的项目中使用了与您相同的方法,因为我真的不了解目的吗?如果您想清楚这一点,我可以为您提供更多帮助
-
我想我只是在问像这样的设置结合 nHibernate Validator 的“最干净”的方法是什么。这篇文章 [link]marekblotny.blogspot.ca/2009/03/… 展示了如何,但最终你拥有装饰你的对象的属性。也许这是目前最好的方法?我想省略属性并在其他地方指定验证规则。
-
我现在明白了,我的意见是你不应该使用它并在提交到数据库之前验证自己。由于这种方法只是将错误抛出到上面而已。如果已经有验证,这实际上取决于您使用的项目,只需跳过此即可。如果不是,那么可以使用它,但无论如何这不是你应该设置它的地方。属性应该在您的域上,并且验证器设置在您设置所有约定的同一位置。阅读本文以获取更多信息。nhforge.org/wikis/validator/…
-
谢谢。我刚刚添加到我的问题:“我也可以使用不同的验证框架,但我希望它与 nHibernate 绑定,这样它就不会插入/更新无效记录。”我真的很想将验证正确地绑定到 nHibernate。
-
阅读我的编辑,域 = 实体。检查我的链接配置部分
标签: c# nhibernate orm fluent