Trong hệ thống của tôi, tôi có hai thực thể - ShoppingCart và ShoppingCartItem. Trường hợp sử dụng chung chung. Tuy nhiên, khi tôi lưu ShoppingCart của mình, không có mục nào được lưu vào DB.NHibernate: Sử dụng Fluent Nhibernate để lưu các đối tượng con
Trong đối tượng của mình, tôi tạo đối tượng ShoppingCart mới.
ShoppingCart cart = CreateOrGetCart();
Sau đó, tôi thêm sản phẩm hiện có mà tôi nhận được từ cơ sở dữ liệu vào đầu.
cart.AddItem(product);
Đây chỉ là trình bao bọc đơn giản để thêm mục vào IList.
public virtual void AddItem(Product product)
{
Items.Add(new ShoppingCartItem { Quantity = 1, Product = product });
}
sau đó tôi gọi SaveOrUpdate trên Repository
Repository.SaveOrUpdate(cart);
nào trông như thế này:
public T SaveOrUpdate(T entity)
{
Session.SaveOrUpdate(entity);
return entity;
}
Tôi đang sử dụng thành thạo NHibernate cho lập bản đồ:
public ShoppingCartItemMap()
{
WithTable("ShoppingCartItems");
Id(x => x.ID, "ShoppingCartItemId");
Map(x => x.Quantity);
References(x => x.Cart, "ShoppingCartId").Cascade.SaveUpdate();
References(x => x.Product, "ProductId");
}
public ShoppingCartMap()
{
WithTable("ShoppingCarts");
Id(x => x.ID, "ShoppingCartId");
Map(x => x.Created);
Map(x => x.Username);
HasMany<ShoppingCartItem>(x => x.Items)
.IsInverse().Cascade.SaveUpdate()
.WithKeyColumn("ShoppingCartId")
.AsBag();
}
Lược đồ cơ sở dữ liệu (SQL Server 2005) cũng khá chung chung:
CREATE TABLE [dbo].[ShoppingCarts]
(
[ShoppingCartID] [int] NOT NULL IDENTITY(1, 1),
[Username] [nvarchar] (50) NOT NULL,
[Created] [datetime] NOT NULL
)
GO
ALTER TABLE [dbo].[ShoppingCarts] ADD CONSTRAINT [PK_ShoppingCarts] PRIMARY KEY CLUSTERED ([ShoppingCartID])
GO
CREATE TABLE [dbo].[ShoppingCartItems]
(
[ShoppingCartItemId] [int] NOT NULL IDENTITY(1, 1),
[ShoppingCartId] [int] NOT NULL,
[ProductId] [int] NOT NULL,
[Quantity] [int] NOT NULL
)
GO
ALTER TABLE [dbo].[ShoppingCartItems] ADD CONSTRAINT [PK_ShoppingCartItems] PRIMARY KEY CLUSTERED ([ShoppingCartItemId])
GO
ALTER TABLE [dbo].[ShoppingCartItems] ADD CONSTRAINT [FK_ShoppingCartItems_Products] FOREIGN KEY ([ProductId]) REFERENCES [dbo].[Products] ([ProductId])
GO
ALTER TABLE [dbo].[ShoppingCartItems] ADD CONSTRAINT [FK_ShoppingCartItems_ShoppingCarts] FOREIGN KEY ([ShoppingCartId]) REFERENCES [dbo].[ShoppingCarts] ([ShoppingCartID])
GO
Khi tôi lưuCài đặtCửa hàng mua sắm của tôi, tại sao mọi ShoppingCartItems cũng không được lưu?
Vui lòng trợ giúp.
Cảm ơn
Bến
UPDATE: gói nó trong một giao dịch providng tôi với một số thông tin thêm:
Không thể chèn các giá trị NULL vào cột 'ShoppingCartId', bảng 'WroxPizza .dbo.ShoppingCartItems '; cột không cho phép null. INSERT không thành công. Các tuyên bố này đã bị chấm dứt.
Điều này là do đó là một giỏ hàng mới.
Giải pháp của James Gregorys dành cho tôi. –