Fluent NHibernate配置无效或不完整-映射中存在第三方类型

本文关键字:映射 存在 类型 第三方 配置 NHibernate 无效 Fluent | 更新日期: 2023-09-27 18:17:19

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

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();

配置炸弹和抱怨:

无法确定类型:mynamspace . specialtype…,

'Potential Reasons'集合在异常详细信息中为空。我怀疑这可能是因为"SpecialType"。该类型不重写ToString()..我想知道如果问题是NHibernate不知道如何设置或获得这个属性值?第三方类型是NHibernate的问题吗?我是否需要为映射提供有关如何代理该对象的信息?

谢谢! !

编辑

通过查看'SpecialType'的源代码,我想我看到了问题所在。这个类有一个私有构造函数。这个类的一个实例是使用方法‘FromValue(字符串值)’创建的。我想这一定是NHibernate困惑的原因。必须有办法配置框架如何新闻实例..

Fluent NHibernate配置无效或不完整-映射中存在第三方类型

私有无参数构造函数对于NHibernate来说很好。只需为它创建一个映射,例如MyClassMap中的组件:

Component(x => x.SpecialType, c => 
{
    c.Map(st => st.Prop1);
    c.Map(st => st.Prop2);
});
相关文章: