如何在使用自动映射时使用Fluent NHibernate Validator?

时间:2012-05-29 19:45:39

标签: c# nhibernate orm fluent

我刚刚使用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绑定,以便它不会插入/更新无效记录。任何意见赞赏!

1 个答案:

答案 0 :(得分:2)

我的意见是:

验证是业务的一部分,它依赖于它,然后数据库扩展到这个需求。因此,如果您需要在数据库中使用电子邮件字符串列,则不应该依赖数据库框架来执行此操作,尤其是您可能稍后会切换ORM然后您将丢失工作。

在业务/高层保持验证,并让db做简单的查询/插入,记住NHibernate已经有点复杂了,所以保持简单。

要回答您的问题,如果您不想乱丢您的实体,请使用xml验证,如此处所述。

http://nhforge.org/wikis/validator/nhibernate-validator-1-0-0-documentation.aspx