1

我正在尝试将 ASP.NET Web API 项目转换为使用 Fluent NHibernate。我已经有一段时间没有冬眠了。我有一个到由第 3 方类型组成的模型的映射。例如:

public MyClass{
public MyClass{}

public virtual int Id {get;set;}
public virtual SpecialType {get;set;} //I don't own the 'SpecialType' class.

}

然后我为这个类做了一个简单的映射:

public class MyClassMap : ClassMap<MyClass>
{
    public MyClass()
    {
        Id(i => i.Id);
        Map(i => i.SpecialType);          

    }
}

我有以下配置:

return Fluently.Configure()
            .Database(SQLiteConfiguration.Standard
            .ConnectionString(_connString))
            .Mappings(m => m.FluentMappings
                .AddFromAssemblyOf<MyClassMap>())
                .ExposeConfiguration(UpdateSchema)
                .BuildSessionFactory();

配置炸弹和抱怨:

无法确定类型:mynamespace.SpecialType...,

异常详细信息中的“潜在原因”集合为空。我怀疑这可能是因为“特殊类型”。该类型确实会覆盖 ToString().. 我想知道问题是否在于 NHibernate 不知道如何设置或获取此属性值?3rd 方类型是 NHibernate 的问题吗?我是否需要向映射提供有关如何代理此对象的信息?

谢谢!!

编辑

通过查看“SpecialType”的来源,我想我明白了问题所在。这个类有一个私有构造函数。此类的一个实例是使用方法“FromValue(string value)”创建的。我认为这一定是 NHibernate 感到困惑的原因。必须有办法配置框架如何更新实例。

4

1 回答 1

0

私有无参数构造函数适用于 NHibernate。只需为其创建一个映射,例如作为 MyClassMap 中的组件:

Component(x => x.SpecialType, c => 
{
    c.Map(st => st.Prop1);
    c.Map(st => st.Prop2);
});
于 2013-06-07T12:39:27.430 回答