2010-06-25 17 views
6

का उपयोग कर नए डेटा डालें मैं वास्तव में 2 डेटाबेस टेबल में कुछ डेटा डालने के लिए संघर्ष कर रहा हूं।लिंक - डब्ल्यूसीएफ डाटा सर्विसेज (पूर्व में एडीओ.NET डेटा सर्विसेज)

मैं WCF डेटा सेवाओं से अधिक Linq का उपयोग कर रहा इकाई की रूपरेखा 4.

2 टेबल इस तरह दिखना का उपयोग कर:

CREATE TABLE [dbo].[Accounts] (
    [Id] int IDENTITY(1,1) NOT NULL, 
    [Email] nvarchar(max) NOT NULL, 
    [Password] nvarchar(max) NOT NULL 
); 

CREATE TABLE [dbo].[Employees] (
    [Id] int IDENTITY(1,1) NOT NULL, 
    [Name] nvarchar(max) NOT NULL, 
    [Role] nvarchar(max) NOT NULL, 
    [Account_Id] int NOT NULL 
); 

ALTER TABLE [dbo].[Employees] 
ADD CONSTRAINT [FK_EmployeeAccount] 
    FOREIGN KEY ([Account_Id]) 
    REFERENCES [dbo].[Accounts] 
    ([Id]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION; 

प्रत्येक कर्मचारी सिर्फ 1 खाता होना चाहिए। हालांकि, किसी खाते में कोई कर्मचारी नहीं हो सकता है।

मैं संस्थाओं चला करती है, और एक DataService जो आराम का उपयोग नियमों के साथ सेटअप है उजागर:

config.SetEntitySetAccessRule("Accounts" , EntitySetRights.All); 
config.SetEntitySetAccessRule("Employees" , EntitySetRights.All); 

LINQPad का उपयोग करते हुए मैं सफलतापूर्वक इस तरह एक एकल खाता पंक्ति सम्मिलित कर सकते हैं:

var context = this; 
Account account = Account.CreateAccount(1, "[email protected]", "[email protected]"); 
context.AddToAccounts(account); 
context.SaveChanges(); 

मैं SQL सर्वर से देख सकता हूं कि पंक्ति डाली गई है, और लिंककैड कोई त्रुटि रिपोर्ट नहीं करता है।

समस्या तब होती है जब मैं एक संबंधित खाता और कर्मचारी पंक्ति दोनों को एक साथ सम्मिलित करने का प्रयास करता हूं।

मुझे यकीन है कि नीचे दिए गए कोड को काम करना चाहिए?

var context = this; 
Account account = Account.CreateAccount(1, "[email protected]", "password"); 
context.AddToAccounts(account); 
Employee employee = Employee.CreateEmployee(1, "Foo", "Developer"); 
employee.Account = account; 
context.AddToEmployees(employee); 
context.SaveChanges(); 

प्रतिक्रिया मैं (वर्बोज़ त्रुटियों सक्षम) के साथ सर्वर से वापस पाने के मूल रूप से कहा गया है कि:

Account row inserted successfully (HTTP 201) 
Employee row did not insert (HTTP 500) 

पूर्ण त्रुटि है:

'DbContainer.Employees' में भाग लेने की इकाइयां 'कर्मचारी खाता' संबंध। 0 संबंधित 'खाता' पाए गए। 1 'खाता' की उम्मीद है।

क्या किसी के पास ऐसा उदाहरण है जो डब्ल्यूसीएफ डेटा सेवाओं के खिलाफ काम करता है?

उत्तर

7

किसी को भी इस समाधान पढ़ने के लिए SaveChanges से पहले निम्न पंक्ति()

context.SetLink(employee, "Account", account); 

सीधे शब्दों में कर्मचारी को खाता बताए पर्याप्त नहीं था, एक लिंक भी स्थापित करने की जरूरत को जोड़ने के लिए किया गया था।

+0

अच्छा एक। बाद में बुकिंग के रूप में मुझे यकीन है कि जब मैं कुछ डब्ल्यूसीएफ डेटा सेवाओं को शुरू करता हूं तो मैं इस समस्या में भाग लेगा। –

+2

यह ऐसी चीज है जो डब्ल्यूसीएफ डाटा सर्विसेज ** हमारे लिए करनी चाहिए ** ** ** सभी मामलों में ** आपको दो इकाइयों को जोड़ने के बाद 'सेटलिंक' को कॉल करना होगा। – Yuck

+0

नोट: यदि आपको सेटलिंक को कॉल करते समय "ट्रैक नहीं किया जा रहा" अपवाद प्राप्त होता है, तो 'AddToMySource (mySource)' _before_ कॉलिंग 'सेटलिंक (mySource, "Property", myTarget) को कॉल करना सुनिश्चित करें। – Pakman

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