मेरे सिस्टम में, मेरे पास दो इकाइयां हैं - शॉपिंगकार्ट और शॉपिंगकार्ट इटिम। काफी सामान्य उपयोग-मामला। हालांकि, जब मैं अपना शॉपिंगकार्ट सहेजता हूं, तो डीबी में कोई भी आइटम सहेजा नहीं जा रहा है।एनएचबेर्नेट: बाल वस्तुओं को बचाने के लिए फ्लुएंट निबर्ननेट का उपयोग
मेरी ऑब्जेक्ट में, मैं एक नया शॉपिंगकार्ट ऑब्जेक्ट बनाता हूं।
ShoppingCart cart = CreateOrGetCart();
मैं तब एक मौजूदा उत्पाद जोड़ता हूं जो मुझे डेटाबेस से शुरू में मिला।
cart.AddItem(product);
यह आइटम को आईलीस्ट में जोड़ने के लिए बस एक साधारण आवरण है।
public virtual void AddItem(Product product)
{
Items.Add(new ShoppingCartItem { Quantity = 1, Product = product });
}
मैं तो भंडार
Repository.SaveOrUpdate(cart);
कौन इस तरह दिखता है पर SaveOrUpdate फोन:
public T SaveOrUpdate(T entity)
{
Session.SaveOrUpdate(entity);
return entity;
}
मैं धाराप्रवाह NHibernate का उपयोग कर रहा मानचित्रण के लिए:
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();
}
डेटाबेस स्कीमा (एसक्यूएल सर्वर 2005) भी काफी सामान्य है:
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
जब मैं अपने ShoppingCart SaveOrUpdate, क्यों किसी भी ShoppingCartItems भी सहेजा नहीं जा रहा है?
कृपया मदद करें।
धन्यवाद
बेन
अद्यतन: किसी लेनदेन में यह रैपिंग मुझे कुछ अधिक जानकारी के साथ providng:
, टेबल 'ShoppingCartId' कॉलम में Null मूल्य सम्मिलित नहीं कर सकते 'WroxPizza .dbo.ShoppingCartItems '; कॉलम नल की अनुमति नहीं देता है। INSERT विफल रहता है। बयान समाप्त कर दिया गया है।
ऐसा इसलिए है क्योंकि यह एक नया कार्ट है।
जेम्स ग्रेगरी समाधान ने मेरे लिए काम किया। –