gpt4 book ai didi

c# - 使用 Linq 插入新数据——WCF 数据服务(以前称为 ADO.NET 数据服务)

转载 作者:太空狗 更新时间:2023-10-29 21:30:56 25 4
gpt4 key购买 nike

我真的很难将一些数据插入到 2 个数据库表中。

我正在使用 Entity Framework 4 通过 WCF 数据服务使用 Linq。

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 个帐户。但是,一个帐户可能根本没有任何员工。

我已经生成了实体,并公开了一个使用宽松访问规则设置的数据服务:

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 数据服务的示例吗?

最佳答案

对于阅读本文的任何人,解决方案是在 SaveChanges() 之前添加以下行

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

仅仅将帐户分配给员工是不够的,还需要建立链接。

关于c# - 使用 Linq 插入新数据——WCF 数据服务(以前称为 ADO.NET 数据服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3120028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com