首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluent NHibernate AutoMapping重写忽略列名称

Fluent NHibernate AutoMapping重写忽略列名称
EN

Stack Overflow用户
提问于 2014-04-12 02:13:42
回答 1查看 1.3K关注 0票数 0

两个表:

代码语言:javascript
复制
CREATE TABLE [dbo].[Error](
[ErrorId] [int] IDENTITY(1,1) NOT NULL,
[ResponseId] [int] NOT NULL,
<Other fields>

 CONSTRAINT [PK_Error] PRIMARY KEY CLUSTERED 
(
    [ErrorId] ASC
)

CREATE TABLE [dbo].[Response](
[ResponseId] [int] IDENTITY(1,1) NOT NULL,
<other fields>
 CONSTRAINT [PK_Response] PRIMARY KEY CLUSTERED 
(
    [ResponseId] ASC
)

以及这些类

代码语言:javascript
复制
public partial class ErrorType
{
    public virtual long Id { get; set; }
    public virtual hr_information_type Response { get; set; }
<other fields>
}

public class hr_information_type 
{
    public virtual long Id { get; set; }
    public virtual ErrorType[] Errors { get; set;}
<other fields>
}

我正在使用自动映射,并因此覆盖它:

代码语言:javascript
复制
public class hr_information_typeMap : IAutoMappingOverride<hr_information_type>
{
    public void Override(AutoMapping<hr_information_type> mapping)
    {
        mapping.Table("Response");
        mapping.Id(x => x.Id).Column("ResponseId");
        mapping.HasMany(many => many.Errors).AsArray(a => a.Response, x => x.Column("ResponseId"));         
    }
}

public class ErrorTypeMap : IAutoMappingOverride<ErrorType>
{
    public void Override(AutoMapping<ErrorType> mapping)
    {
        mapping.Table("Error");
        mapping.Id(id => id.Id).Column("ErrorId");
        mapping.References(r => r.Response, "ResponseId");
    }
}

我遇到的问题是,当我调用Session.Load(id)时,我得到以下错误

“无法初始化集合:”具有内部异常“”无效的列名“”hr_information_type_id“”

因为它将SQL生成为

代码语言:javascript
复制
SELECT 
errors0_.hr_information_type_id as hr7_1_, 
errors0_.ErrorId as ErrorId1_, 
errors0_.ResponseId as ResponseId1_, 
errors0_.ErrorId as ErrorId26_0_,
errors0_.ResponseId as ResponseId26_0_ 
FROM Error errors0_ 
WHERE errors0_.hr_information_type_id=?

我不知道为什么它要查找一个我从未说过存在的列,也不知道为什么它要两次查找任何列。

我做错了什么?我在其他不使用Auto Mapping的项目中有非常类似的代码,所以这不是进行覆盖的正确方法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-15 03:30:06

Mapping.HasMany( part => many.Errors).AsArray(a => a.Response,part => )

它需要一个索引和一个键。我查看了它生成的HBM文件(使用

代码语言:javascript
复制
.Mappings(m =>
{
    m.FluentMappings.AddFromAssembly(assembly).ExportTo(@"C:\nh.out");
    m.AutoMappings.Add(am).ExportTo(@"C:\nh.out");
}

)

看到了这一点。索引是part.Column("ErrorId")部分,这是它对集合进行索引的方式(即使它只是一个数组)。这让我走得更远,但不是100%确定这是完整的答案。

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

https://stackoverflow.com/questions/23019798

复制
相关文章

相似问题

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