Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-FluentNHibernate映射,如何使用生成器映射表中的非键列_C#_Fluent Nhibernate_Fluent Nhibernate Mapping - Fatal编程技术网

C#-FluentNHibernate映射,如何使用生成器映射表中的非键列

C#-FluentNHibernate映射,如何使用生成器映射表中的非键列,c#,fluent-nhibernate,fluent-nhibernate-mapping,C#,Fluent Nhibernate,Fluent Nhibernate Mapping,我使用的是Firebird DB,在NHibernate中,我映射了我的实体,如下所述。 由于REQUIREMENTSHID是一个主键,我可以很容易地将其映射到DB生成器的值,即“GEN\u REQUIREMENTSH”。我想知道是否可以映射一个非键列,即SequenceNumber,以从生成器获取其值,即“GEN\u REQUIREMENTSH\u SEQNO” 我不熟悉NHibernate和.Net,这里需要一点指导,如何为非键列使用DB生成的值 public class Requireme

我使用的是Firebird DB,在NHibernate中,我映射了我的实体,如下所述。 由于
REQUIREMENTSHID
是一个主键,我可以很容易地将其映射到DB生成器的值,即
“GEN\u REQUIREMENTSH”
。我想知道是否可以映射一个非键列,即
SequenceNumber
,以从生成器获取其值,即
“GEN\u REQUIREMENTSH\u SEQNO”

我不熟悉NHibernate和.Net,这里需要一点指导,如何为非键列使用DB生成的值

public class RequirementHeaderMap : ClassMap<RequirementHeader>
{
    public RequirementHeaderMap()
    {
        Table("REQUIREMENTSH");

        Id(x => x.ID).Column("REQUIREMENTSHID").GeneratedBy.Sequence("GEN_REQUIREMENTSH");
        Map(x => x.SequenceNumber).Column("SEQUENCENO");
        Map(x => x.JobNumber).Column("JOBNO");
        Map(x => x.BatchesRequired);
        Map(x => x.Status);
        Map(x => x.Created).Column("CREATIONDATE");
        Map(x => x.Deleted);

        //... rest of the mappings

    }
}
公共类要求HeaderMap:ClassMap
{
公共需求首脑会议()
{
表(“要求SH”);
Id(x=>x.Id).Column(“REQUIREMENTSHID”)。由.Sequence(“GEN_REQUIREMENTSH”)生成;
映射(x=>x.SequenceNumber).Column(“SEQUENCENO”);
Map(x=>x.JobNumber).Column(“JOBNO”);
Map(x=>x.batchsRequired);
Map(x=>x.Status);
Map(x=>x.Created).Column(“CREATIONDATE”);
映射(x=>x.Deleted);
//…其余的映射
}
}

不确定这是否可以在映射中实现,但您可以使用:

将任何新对象添加到会话后,将调用此侦听器

您需要在创建
会话工厂时注册此侦听器

public class RequirementHeaderListener : IPostInsertEventListener
{
    public void OnPostInsert(PostInsertEvent e)
    {
        if (e.Entity is RequirementHeader header)
        {
            var number = e.Session.CreateSQLQuery("SELECT NEXT VALUE FOR Seq_Sequence").UniqueResult().ToString();
            header.SequenceNumber = int.Parse(number);
        }
    }

    public Task OnPostInsertAsync(PostInsertEvent e, CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }
}