C# 使用NHibernate映射时重写列大小写

C# 使用NHibernate映射时重写列大小写,c#,fluent-nhibernate,C#,Fluent Nhibernate,我以为这很容易找到,但我有麻烦。我有一个从名为EntityBase的类继承的类,该类有一个ID字段。基类如下所示 //Here is the declaration public abstract class EntityBase<IdType> //here is the property private IdType _id; public virtual IdType ID { get { return _id; } set

我以为这很容易找到,但我有麻烦。我有一个从名为EntityBase的类继承的类,该类有一个ID字段。基类如下所示

//Here is the declaration
public abstract class EntityBase<IdType>

//here is the property
private IdType _id;
public virtual IdType ID 
{
    get
    {
        return _id;
    }
    set
    {
        _id = value;
    }
}
//这是声明
公共抽象类EntityBase
//这是物业
私有id类型_id;
公共虚拟ID类型ID
{
得到
{
返回_id;
}
设置
{
_id=值;
}
}
这适用于大多数实体,但我们有一个实体,它实际上是从另一个数据库上运行的存储过程中生成的,问题与我们的数据库不同,它返回“Id”而不是“Id”。我尝试了几种方法来覆盖它并设置Id,但我一直遇到以下错误

NHibernate.PropertyNotFoundException:在类中找不到属性“Id”的setter

public class ListingMapping : IAutoMappingOverride<Listing>
{
    public void Override(AutoMapping<Listing> mapping)
    {
        mapping.Map(x => x.ID).Column("Id");
        mapping.Id(x => x.ID).Column("Id");
    }
}
公共类列表映射:IAutoMappingOverride
{
公共无效替代(自动映射)
{
Map(x=>x.ID).Column(“ID”);
mapping.Id(x=>x.Id).Column(“Id”);
}
}
下面是如何创建实体的

public Listing GetListingById(Guid ListingId)
{
    IQuery query = GetSession().GetNamedQuery("GetListingById")
                        .SetParameter("ListingId", ListingId)
                        .SetResultTransformer(Transformers.AliasToBean<Listing>());

     return (query.UniqueResult<Listing>());
}
公共列表GetListingById(Guid ListingId)
{
IQuery=GetSession().GetNamedQuery(“GetListingById”)
.SetParameter(“ListingId”,ListingId)
.SetResultTransformer(Transformers.AliasToBean());
返回(query.UniqueResult());
}

我知道自动映射正在加载,因为它们适用于我们覆盖方案的其他类型。希望这是足够的信息,有人能给我指出正确的方向

您的问题与NHibernate映射无关。使用命名查询和结果转换器时不涉及映射

您的问题是
AliasToBeanResultTransformer
,它尝试在类中为查询返回的每个别名查找属性,这是区分大小写的

您有4种解决方案:

  • 如果可以修改存储过程,请将其更改为返回正确的大小写。例如:
    选择Id作为Id

  • EntityBase
    中的
    ID
    属性重命名为
    ID
    ,并将其映射到
    ID

  • 如果这是一种孤立的情况,请删除EntityBase的继承,并添加一个名为
    Id
    的属性

  • 编写自己的
    NHibernate.Transform.IResultTransformer
    实现。 看看


  • 是的,最后我让人修改了存储过程。我怀疑映射在这种情况下没有任何作用,但是感谢您的确认。这解决了我的问题!!在我的例子中,属性名是ContactCode,但我使用CreateSQLQuery并传递属性的别名,而不带引号。花了引号之后,我的问题就解决了。非常感谢你的回答!!!