C#-FluentNHibernate映射,如何使用生成器映射表中的非键列
我使用的是Firebird DB,在NHibernate中,我映射了我的实体,如下所述。 由于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
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;
}
}