Я действительно изо всех сил пытаюсь вставить некоторые данные в 2 таблицы базы данных.
Я использую Linq вместо служб данных WCF с использованием Entity Framework 4.
Две таблицы выглядят так:
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, я могу успешно вставить одну строку Account следующим образом:
var context = this;
Account account = Account.CreateAccount(1, "[email protected]", "p@ssword");
context.AddToAccounts(account);
context.SaveChanges();
По SQL Server я вижу, что строка была вставлена, а LinqPad не сообщает об ошибке.
Проблема в том, что я пытаюсь вставить вместе связанные строки Account и Employee.
Я уверен, что приведенный ниже код должен работать?
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 Data Services?