我正在使用流畅的nhibernate设置nhibernate以进行相对简单的设置。除了我的对象上的一个属性外,自动化能够完成目前所有的一切。
我有MongoDB.Bson.ObjectId
类型的属性。这是一个简单的不可变结构,它基本上代表了一个二进制ID,它也可以很容易地以字符串格式表示。这些属性导致NHibernate抛出错误说:
表PostView中的关联引用了一个未映射的类: MongoDB.Bson.ObjectId
当然,这是非常期待的,因为我不希望nhibernate理解ObjectId是什么。
我被困的地方是我想要的是能够告诉Nhibernate将这个对象类型映射到数据库中的字符串表示。我希望能够在仍然使用自动化的同时做到这一点,所以我不必明确地映射所有这些对象 - 我想要的是能够只是说"每当你发现此对象类型使用此映射"。我发现提到NHibernate.UserTypes.IUserType
似乎看起来像我想要的那样,但我发现没有任何有用的告诉我如何使用它。
总结一下这个问题:
如何自动将自定义数据类型映射到已知类型以存储在数据库中(当然也可以反过来)。
如果可能,我宁愿不将对象更改为存储对象的字符串表示。
答案 0 :(得分:1)
您必须为此类型编写约定。 像这样:
public class CustomTypeConvention : IUserTypeConvention
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.PropertyType == typeof(MyType));
}
public void Apply(IPropertyInstance target)
{
target.CustomType(typeof(string));
}
}
并将此约定添加到映射:
mapping.Conventions.Add(new CustomTypeConvention());