【发布时间】:2010-06-26 18:21:54
【问题描述】:
我真的很难将一些数据插入到 2 个数据库表中。
我正在使用 Entity Framework 4 通过 WCF 数据服务使用 Linq。
两张表如下所示:
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, "foo@example.com", "p@ssword");
context.AddToAccounts(account);
context.SaveChanges();
从SQL Server可以看到已经插入了行,LinqPad没有报错。
问题是当我尝试同时插入相关的客户行和员工行时。
我确定下面的代码应该可以工作吗?
var context = this;
Account account = Account.CreateAccount(1, "foo@example.com", "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 数据服务的示例吗?
【问题讨论】:
标签: c# linq entity-framework-4 wcf-data-services