Nhibernate Сохранить () не работает

Я нашел все для этой проблемы, и я не уверен, в чем проблема с моим кодом. Буду очень признателен, если кто-нибудь сможет мне помочь. Я работаю над добавлением пользовательских данных в uCommerce 7.2.2, что означает расширение деталей заказа путем добавления новой вкладки.

Для этого я создал новую таблицу, как это -

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

        }

Я сослался на этот документ - Сохранить пользовательские данные

Создание тега сборки тегов и регистрация тега сборки также завершены.

Любая помощь приветствуется!

Заранее спасибо.

1 ответ

Решение

У меня есть решение этой проблемы, и я думаю, что я должен опубликовать его здесь тоже.

NHibernate обрабатывает имена свойств по соглашению, и что LineOrderStatusId будет рассматриваться как внешний ключ. В этом случае лучше использовать Reference в сопоставлениях для этого класса, а NHibernate позаботится об отношении.

Если имя столбца имеет постфикс с идентификатором, то он будет рассматриваться как ссылка на некоторую родительскую таблицу. Это соглашение, используемое отображениями uCommerce nHibernate.

Спасибо

Другие вопросы по тегам