2017-06-23 118 views
0

我身邊的一切對於這個問題一派,我不知道這個問題是我的代碼是什麼。如果有人能幫助我,我將不勝感激。我正在將自定義數據添加到uCommerce 7.2.2,意味着通過添加新選項卡來擴展訂單詳細信息。NHibernate的保存()不工作

爲此,我創建了一個新的表像這樣 -

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

    } 

映射爲表和實體做 -

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

這是我得到例外的保存方法 -

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** 

     } 

我已經提到這個文檔 - Save custom data

創建測組件標籤並註冊組件標籤也做。

任何幫助讚賞!

在此先感謝。

+0

保存或更新?你在哪裏ISession.Commit /沖洗? http://www.karlgjertsen.com/nhibernate-flush-vs-commit/ –

回答

1

我得到這個問題的解決方案,我想我應該張貼在這裏了。

NHibernate的按約定,以及「LineOrderStatusId」想一個外鍵來處理對待屬性名稱。在這種情況下,最好在該類的映射中使用Reference,並讓NHibernate處理關係。

如果列名中有編號後綴那麼這將被視爲一些父表的引用。這是uCommerce nHibernate映射所使用的約定。

謝謝