我正在尝试将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();
配置炸弹和抱怨:
无法确定:mynamespace.SpecialType ...,
的类型
'潜在原因'集合在异常详细信息中为空。我怀疑这可能是因为'SpecialType'。该类型确实覆盖ToString()..我想知道问题是NHibernate不知道如何设置或获取此属性值?第三方类型是NHibernate的问题吗?我是否需要提供有关如何代理此对象的信息的映射?
谢谢!
修改
通过源代码查看'SpecialType',我想我知道问题是什么。这个类有一个私有构造函数。使用方法'FromValue(string value)'创建此类的实例。我认为这必然是NHibernate混淆的原因。必须有办法配置框架新闻实例的方式..
答案 0 :(得分:0)
私有无参数构造函数适用于NHibernate。只需为它创建一个Mapping,例如作为MyClassMap中的组件:
Component(x => x.SpecialType, c =>
{
c.Map(st => st.Prop1);
c.Map(st => st.Prop2);
});