6
我非常努力地將一些數據插入到2個數據庫表中。使用Linq插入新數據 - WCF數據服務(以前稱爲ADO.NET數據服務)
我使用實體框架4.
的2個表看起來像這樣使用LINQ在WCF數據服務:
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 Server看到該行已被插入,並且LinqPad報告沒有錯誤。
問題是,當我嘗試將相關的帳戶和員工行一起插入時。
我確定下面的代碼應該可以工作嗎?
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」參加
實體'EmployeeAccount'關係。找到0個相關的「帳戶」。 1'帳戶'預計。
有沒有人有一個針對WCF數據服務的例子?
不錯的。之後預訂,因爲我確信當我開始使用一些WCF數據服務時,我會遇到這個問題。 – 2010-08-26 01:00:02
這是WCF數據服務**應該爲我們**做的事情,因爲在所有情況下**都必須在關聯兩個實體後調用SetLink。 – Yuck 2011-06-16 19:21:00
注意:如果在調用SetLink時收到「未被跟蹤」異常,請確保調用'AddToMySource(mySource)'_before_調用'SetLink(mySource,「Property」,myTarget)'' – Pakman 2012-03-19 15:21:48