流畅的NHibernate - 覆盖一个特定类的特定属性的类型?

时间:2011-03-31 21:23:26

标签: fluent-nhibernate

我有一个类,它有一个我想在db中加密存储的密码属性。该属性是一个字符串类型,我有一个自定义类型EncryptedStringType,我希望NHibernate用它来映射到数据库。这是我的相关自动化代码:

var mappings = AutoMap.AssemblyOf<Business>()
    .Where(x=>x.IsSubclassOf(typeof(EntityBase)))
    .IgnoreBase(typeof(EntityBase))
    .Conventions.Add
        (
            ConventionBuilder.Id.Always(x =>
                x.GeneratedBy.HiLo(HILO_TABLE, HILO_COLUMN, HILO_MAX_LO)),
            ConventionBuilder.HasMany.Always(x => x.Cascade.AllDeleteOrphan()),
            Table.Is(o => Inflector.Pluralize(o.EntityType.Name)),
            PrimaryKey.Name.Is(o => "Id"),
            ForeignKey.EndsWith("Id"),
            DefaultLazy.Always(),
            DefaultCascade.All()
        );

我无法弄清楚覆盖Business类的UserPassword属性的类型的语法。我以为我应该可以做一些事情,比如:

mappings.Override<Business>(map=> /* Not sure what to do here */);

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您始终可以创建映射覆盖类。任何仍然可以应用的约定都是,但您基本上可以指定映射类似于覆盖默认约定的ClassMap。

使用对mappings.Override()的调用,它看起来像:

mappings.Override<Business>(map=>map.Map(x=>x.UserPassword).CustomType(typeof(EncryptedStringType)));

答案 1 :(得分:0)

自己找到答案。

mappings.Override<Business>(map =>
{
    map.Map(x => x.UserPassword).CustomType<EncryptedStringType>();
});