nHibernate Generated By.Assigned 不起作用



我正在尝试插入带有复合键的记录(不是我的数据库设计,我被迫使用公司模式,因此更改数据库在这里不是一个选项)。

我有以下POCO类

public class RulesEngineHeader
{
    public virtual string CompanyCode { get; set; }
    public virtual string RuleID { get; set; }
    public virtual string RuleGroup { get; set; }
    public virtual string RuleDescription { get; set; }
    public virtual string Expression { get; set; }
}    

和以下映射(使用流利)

internal class RulesEngineHeaderMap : ClassMap<RulesEngineHeader>
{
    internal RulesEngineHeaderMap()
    {
        Table("LIOEP023");
        Id(x => x.CompanyCode, "CONO23")
            .GeneratedBy.Assigned()
            .Length(2)
            .Not.Nullable();
        Id(x => x.RuleID, "RLID23")
            .GeneratedBy.Assigned()
            .Length(30)
            .Not.Nullable();
        Map(x => x.RuleGroup, "RGRP23")
            .Length(30)
            .Not.Nullable();
        Map(x => x.RuleDescription, "RLDS23")
            .Length(50)
            .Not.Nullable();
        Map(x => x.Expression, "EXPR23")
            .Length(2500)
            .Not.Nullable();
    }
}

使用以下代码:

using (iSeriesUOW uow = new iSeriesUOW())
{
    GenericRepository<RulesEngineHeader> rep = new GenericRepository<RulesEngineHeader>(uow);
    RulesEngineHeader header = new RulesEngineHeader();
    header.CompanyCode = "LI";
    header.RuleID = "TEST";
    header.RuleGroup = "AC";
    header.RuleDescription = "Description";
    header.Expression = "This is my rule expression";
    rep.Add(header);
    uow.Commit();
}

代表。添加只是做了一个

_uow.Session.Save(entityObject);

和呜。提交();做一个 _会期。同花顺();

if (_tx != null)
    _tx.Commit();

当我执行这个时,我得到以下查询试图执行:

INSERT INTO LIOEP023
    (RGRP23,
    RLDS23,
    EXPR23,
    RLID23)
VALUES      ('AC' /* @p0_0 */,
    'Description' /* @p1_0 */,
    'This is my rule expression' /* @p2_0 */,
    'TEST' /* @p3_0 */)

如您所见,我的公司代码/CONO23无处可寻,这导致了错误。

知道为什么我的插入中没有使用它吗?

我发现我应该使用 CompositeId 而不是使用 2 个 Id。

所以我的代码应该看起来像这样:

internal RulesEngineHeaderMap()
{
    Table("LIOEP023");
    CompositeId()
        .KeyProperty(x => x.CompanyCode, "CONO23")
        .KeyProperty(x => x.RuleID, "RLID23");
    Map(x => x.RuleGroup, "RGRP23")
        .Length(30)
        .Not.Nullable();
    Map(x => x.RuleDescription, "RLDS23")
        .Length(50)
        .Not.Nullable();
    Map(x => x.Expression, "EXPR23")
        .Length(2500)
        .Not.Nullable();
}

最新更新