2017-06-23 8 views
0

私はこの問題のためにすべてを調べました。私のコードで何が問題なのかよく分かりません。誰かが私を助けることができたら本当に感謝します。私はuCommerce 7.2.2にカスタムデータを追加する作業をしています。これは、新しいタブを追加して注文の詳細を拡張することを意味します。Nhibernate Save()が動作しません

はこのために私はこのような新しいテーブルを作成している -

CREATE TABLE [dbo].[uCommerce_OrderLineItemStatusAudit](
     [OrderLineItemStatusAuditId] [int] IDENTITY(1,1) NOT NULL, 
     [LineOrderStatusId] [int] NOT NULL, 
     [CreatedOn] [datetime] NOT NULL, 
     [CreatedBy] [nvarchar](50) NOT NULL, 
     [RefOrderId] [int] NOT NULL, 
     [Message] [nvarchar](max) NULL, 
     [Sku] [nvarchar](50) NOT NULL, 
PRIMARY KEY CLUSTERED 
(
     [OrderLineItemStatusAuditId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

GO 

エンティティ -

public class OrderLineItemStatusAuditMap : BaseClassMap<OrderLineItemStatusAudit> 
    { 
     public OrderLineItemStatusAuditMap() 
     { 
      Table("uCommerce_OrderLineItemStatusAudit"); 
      Id(x => x.OrderLineItemStatusAuditId, "OrderLineItemStatusAuditId"); 
      Map(x => x.LineOrderStatusId).Not.Nullable(); 
      Map(x => x.Sku).Not.Nullable(); 
      Map(x => x.CreatedOn).Not.Nullable(); 
      Map(x => x.CreatedBy).Not.Nullable(); 
      Map(x => x.RefOrderId).Not.Nullable(); 
      Map(x => x.Message).Nullable(); 
     } 
    } 

そして、この - 表とエンティティのために行わ

public class OrderLineItemStatusAudit : IEntity 
    { 
     public virtual int Id { get; set; } 
     public virtual int OrderLineItemStatusAuditId { get; set; } 
     public virtual int LineOrderStatusId { get; set; } 
     public virtual DateTime CreatedOn { get; set; } 
     public virtual string CreatedBy { get; set; } 
     public virtual int RefOrderId { get; set; } 
     public virtual string Message { get; set; } 
     public virtual string Sku { get; set; } 

    } 

マッピング私は例外を取得しているセーブメソッドです -

private void Save(OrderLine orderLine) 
     { 
      orderLine.Save(); 

      var orderLineStatus = new OrderLineItemStatusAudit 
       {     
        LineOrderStatusId = 2, 
        Sku = orderLine.Sku, 
        CreatedOn = orderLine.CreatedOn, 
        CreatedBy = "test", 
        RefOrderId = orderLine.OrderLineId, 
        Message = null 
       };    
      _orderLineItemStatus.Save(orderLineStatus); // **getting exception here - Cannot insert null to LineOrderStatusId column** 

     } 

は、私はこのdocと呼ばれている - Save custom data

マッピングアセンブリを作成タグとアセンブリタグを登録することも行われています。

ご了承ください。

ありがとうございます。

+0

保存または更新ですか?あなたはどこにいるのですか?コミット/フラッシュ? http://www.karlgjertsen.com/nhibernate-flush-vs-commit/ –

答えて

1

私はこの問題の解決策を得ました。私はそれもここに投稿するべきだと思います。

NHibernateは慣例によってプロパティ名を処理し、 "LineOrderStatusId"は外部キーのように扱われることに注意してください。この場合、そのクラスのマッピングでReferenceを使用し、NHibernateがその関係を処理するようにしておくとよいでしょう。

カラム名の末尾にIdが付いている場合、それはある親テーブルへの参照として扱われます。これは、uCommerceのnHibernateマッピングで使用されている規約です。

ありがとうございました

関連する問題