我刚刚使用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绑定,以便它不会插入/更新无效记录。任何意见赞赏!
答案 0 :(得分:2)
我的意见是:
验证是业务的一部分,它依赖于它,然后数据库扩展到这个需求。因此,如果您需要在数据库中使用电子邮件字符串列,则不应该依赖数据库框架来执行此操作,尤其是您可能稍后会切换ORM然后您将丢失工作。
在业务/高层保持验证,并让db做简单的查询/插入,记住NHibernate已经有点复杂了,所以保持简单。
要回答您的问题,如果您不想乱丢您的实体,请使用xml验证,如此处所述。
http://nhforge.org/wikis/validator/nhibernate-validator-1-0-0-documentation.aspx