1

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

4

1 回答 1

2

我的意见是:

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

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

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

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

于 2012-05-29T20:56:04.317 回答