Вставьте Новое использование Данных Linq — Услуги передачи данных WCF (раньше Услуги передачи данных ADO.NET)

Я действительно изо всех сил пытаюсь вставить некоторые данные в 2 таблицы базы данных.

Я использую Linq по Услугам передачи данных WCF с помощью Платформы Объекта 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, "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. Сотрудники участвуют в отношениях 'EmployeeAccount'. 0 связанных 'Учетных записей' были найдены. 1 'Учетная запись' ожидается.

У кого-либо есть пример, который работает против Услуг передачи данных WCF?

6
задан Jamie 25 June 2010 в 17:21
поделиться

1 ответ

Для всех, кто читал это, решение заключалось в том, чтобы добавить следующую строку перед SaveChanges ()

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

Простого назначения учетной записи сотруднику было недостаточно, также необходимо было установить ссылку.

7
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: