首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗留映射中的NHibernate映射错误

遗留映射中的NHibernate映射错误
EN

Stack Overflow用户
提问于 2011-07-06 10:42:46
回答 1查看 414关注 0票数 0

我继承了存在于现有功能应用程序中的大量NHibernate映射。我已经扩展了这个应用程序,以开发一些新特性,同时我也在扩展测试基础结构,以支持更类似TDD的方法。但现在我在一次集成测试中遇到了困难.

我有一个包含测试数据的类,在集成测试之前插入这些数据。在插入这些内容的方法中,我得到以下异常:

NHibernate.PropertyAccessException:无效的强制转换(检查属性类型不匹配的映射);Domain.Entities.Project的setter --> System.InvalidCastException:无法将'System.Object‘类型的对象强制转换为’Domain.Enties.ProjectModules‘。

我也搞不懂为什么。我有两个Project实例,我试图在安装时将它们保存在数据库中,这两个实例的定义如下:

代码语言:javascript
复制
new Project("2023", "projeName", "projaddr")
{
    PrincipalOwner = UserOne, // UserOne and Office are other properties
    Office = Office,
    // I've tried just not instantiating this too - gave the same exception
    ProjectModules = new ProjectModules 
    {
        HasModuleOne = false,
        HasModuleTwo = false
    });
});

Fluent NHibernate映射的相关部分如下所示:

代码语言:javascript
复制
Component(m => m.ProjectModules, c =>
{
    c.LazyLoad();
    c.Map(x => x.HasModuleOne)
        .Column("ModuleOne").Not.Nullable().Default("0");
    c.Map(x => x.HasModuleTwo)
        .Column("ModuleTwo").Not.Nullable().Default("0");
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-07 11:19:57

我已经解决了这个问题--出于某种原因,NHibernate不喜欢在项目映射中内联指定组件映射,但是如果我将映射移动到单独的类ComponentMap<T>,它就能工作。所以我把有问题的行改为

代码语言:javascript
复制
Component(p => p.ProjectModules);

并将以下类添加到我的映射程序集中:

代码语言:javascript
复制
public class ProjectModulesMap : ComponentMap<ProjectModules>
{
    LazyLoad.Always();
    Map(pm => pm.ModuleOne);
    Map(pm => pm.ModuleTwo);
}

然后一切都如我所预料的那样从一开始就开始运作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6595089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档