2009-07-21 12 views
6

मेरे तालिका संरचना में बहु तालिका प्रविष्ट के लिए जिस तरह से इससबसे अच्छा अभ्यास/मास्टर विस्तार/इकाई की रूपरेखा

Orders 
------ 
Id int identity 
OrderDate smalldatetime 
OrderStatusid tinyint 

Products 
-------- 
Id int identity 
Name varchar(50) 

OrderDetails 
------------ 
Id int identity 
OrderId int (fkey) 
ProductId int (fkey) 
Amount decimal 
Rate decimal 

मैं
नीचे एक डालने इकाई की रूपरेखा का उपयोग कर कोड का उपयोग कर आपरेशन करने के लिए कोशिश कर रहा हूँ है यह सबसे अच्छा तरीका है सम्मिलित करने के लिए?
मैं इस मास्टर विस्तार करने के लिए सही तरीका है जिस तरह से मैं, संदर्भ वस्तु से पूर्ण उत्पाद आइटम मिल रहा है के बजाय सिर्फ एक सरल productId मूल्य

using (MyContextEntities ctx = new MyContextEntities()) 
{ 
    Orders newOrder = new Orders() 
    { 
    Name = "Gayle Wynand", 
    OrderDate = DateTime.Now, 
    IsComplete = true, 
    Comments = "test", 
    OrderStatusId = 2, 
    IsActive = true 
    }; 
    OrderDetails ode = new OrderDetails(); 
    ode.Products = ctx.Products.First(p => p.Id == 2); // any other way? 
    ode.Quantity = 2; 
    ode.Rate = 5.2; 
    newOrder.OrderDetails.Add(ode); 

    OrderDetails ode2 = new OrderDetails(); 
    ode2.Products = ctx.Products.First(p => p.Id == 3); // any other way? 
    ode2.Quantity = 3; 
    ode2.Rate =6.5; 
    newOrder.OrderDetails.Add(ode2); 


    ctx.AddToOrders(newOrder); 
    ctx.SaveChanges(); 
} 

आवंटित करने के लिए सक्षम होने के साथ खुश नहीं हूँ डालें या कोई बेहतर/दूसरा तरीका है।

+0

अनुपलब्ध 'AddTo ' ... धन्यवाद! – nrod

उत्तर

2

अब आप जो कर रहे हैं वह ठीक काम करेगा।

// substitute your actual qualified entity set name 
ode.ProductsReference.EntityKey = 
    new EntityKey("MyEntities.ProductsEntitySetName", "Id", 2); 

यह तेजी से होता है, लेकिन कम पठनीय:

आप जब ode.Products बताए एक डेटाबेस क्वेरी कर से बचने के लिए चाहते हैं, तो आप निम्नलिखित विकल्प इस्तेमाल कर सकते हैं। साथ ही, जब तक आप इसे लोड नहीं करेंगे तब तक उत्पाद की संपत्ति शून्य हो जाएगी। लेकिन एक डालने के लिए, यह अक्सर ठीक है।

+0

और क्या मास्टर विवरण डेटा अपडेट करने के लिए कोई शॉर्टकट है? –

+0

मुझे यकीन नहीं है कि आपका क्या मतलब है। आप किस प्रकार के शॉर्टकट की उम्मीद कर रहे हैं? क्या आप अपनी जरूरतों के बारे में अधिक विशिष्ट हो सकते हैं? –

+0

मैं जानना चाहता था कि मैं उपर्युक्त एक ही कार्रवाई कैसे करूंगा लेकिन अपडेट ऑपरेशन के लिए। –

1

एक और दृष्टिकोण स्टब EntityKeys से ऑब्जेक्ट्स बल्कि अर्थात

var product = new Product {ID = 2}; 
ctx.AttachTo("Products", product); 
ode.Product = product; 

आदि एक अतिरिक्त बोनस के लिए इस कोड POCO के साथ काम करेंगे कि भविष्य में भी वस्तुओं के रूप में उपयोग करने के लिए किया जाएगा।

उस तकनीक पर अधिक जानकारी के लिए this blog post देखें।

+0

मैंने पहले यह कोशिश की और पाया कि सीटीएक्स को बुलाते समय। सेव चेंज() यह उत्पाद को भी सम्मिलित करने का प्रयास करता है –

संबंधित मुद्दे