2012-09-24 19 views
0

我试图用复合键插入记录(不是我的数据库设计,我不得不使用企业架构,所以更改数据库不是一个选项在这里)。nHibernate GeneratedBy.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(); 
} 

的rep.Add简单地做a

_uow.Session.Save(entityObject); 

and the uow.Commit();做一个 _session.Flush();

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是无处可寻,这是造成错误。

任何想法,为什么这不是在我的插入使用?

回答

1

我觉得,而不是使用2个ID,我应该使用CompositeId。

所以我的代码应该是这样的:

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(); 
}