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.
Спасибо