如何在Nhibernate自动映射中映射对象类型字段

时间:2015-10-01 10:47:22

标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

尝试映射时,出现此错误:

  

关联引用未映射的类:System.Object

我的课程:

public partial class MessageIdentifier
{
    public virtual int ID { get; set; }
    public virtual object Item { get; set; }
}

和惯例:

public class MyUsertypeConvention : IPropertyConvention
{
    public void Apply(IPropertyInstance instance)
    {
        if (instance.Type.Name == "Object")
        instance.CustomType<string>();
    }
}

请建议如何映射?

2 个答案:

答案 0 :(得分:1)

作为一个简单的(快速,天真)解决方案 - 我建议创建并映射真实的string属性。然后让你的 setter getter (或某些AOP或者监听器)来执行“to / from string conversion”:

public partial class MessageIdentifier
{
    public virtual int ID { get; set; }
    public virtual object Item 
    { 
        get { return ... my conversion from string; }
        set { ItemString = ...my conversion to string; } 
    }
    public virtual string ItemString { get; set; }
}

智能且首选(但更具挑战性)是创建CustomType - 这将隐藏转换并支持REUSE。检查例如这里

答案 1 :(得分:0)

不是一个满意的答案。它不适用于使用XML从xsd生成的类。您可以尝试以下方法:

public partial class MessageIdentifier
{
    public virtual int ID { get; set; }
    private object itemField;
    public object Item
    {
        get { return this.itemField; }
        set { this.itemField = value; }
    }
}