Есть две таблицы.Внутренняя вставка внешнего ключа
Customer Contact
_______________________________________
CustomerId *--> CustomerId
CustomerName ContactId
... ContactFirstName
...
One customer can have many contacts
Хранимые процедуры
CREATE PROCEDURE dbo.InsertCustomers
(
@CustomerId int,
@CustomerName nvarchar(50)
)
AS
SET NOCOUNT OFF;
INSERT INTO [dbo].[Customers] ([CustomerName]) VALUES (@CustomerName);
SELECT CustomerId, CustomerName FROM Customers WHERE (CustomerId = @CustomerId)
Второй один:
CREATE PROCEDURE dbo.InsertContacts
(
@CustomerId int,
@ContactFirstName nvarchar(20)
)
AS
SET NOCOUNT OFF;
INSERT INTO [dbo].[Contacts] ([CustomerId], [ContactFirstName]) VALUES (@CustomerId, @ContactFirstName);
SELECT ContactId, CustomerId, ContactFirstName FROM Contacts WHERE (CustomerId = @CustomerId)
Использование Linq к SQL я пытаюсь вставить данные из WinForms в базу данных. В конструкторе я установил поведение вставки в мою хранимую процедуру для обоего, класса Customer и класс Contact, а на
_context.SubmitChanges();
получили ошибку
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_CustomerContact". The conflict occurred in database "test", table "dbo.Customers", column 'CustomerId'.The statement has been terminated.
Должен ли я изменить мою хранимую процедуру или обработок, что в коде ?
Как установить Contacts.CustomerId
при вставке дочерних строк.
Почему вы вставив запись с 'CustomerName' затем выбрать строку с' CustomerId'? Вы можете найти @@ IDENTITY (http://technet.microsoft.com/en-us/library/ms187342.aspx) или SCOPE_IDENTITY() (http://technet.microsoft.com/en-us/library /ms190315.aspx). Предполагая, что таблица 'Customers' имеет первичный ключ auto-inc. –
Я создал эту хранимую процедуру из примера хранимой процедуры Northwind. Можете ли вы объяснить мне, что является проблемой при выборе CustomerId после вставки? Кроме того, должен ли я иметь одну хранимую процедуру для использования @@ IDENTITY, но что делать, если при сохранении мне нужно вставить много дочерних строк в разные дочерние таблицы, такие как контакты, проекты и т. Д. – Carlo
Процедура 'InsertCustomers'. Первый оператор выглядит как первичный ключ auto-inc, но вы передаете customerid как параметр. Я думаю, вы должны определить customerid как выходной параметр. 'SET @CustomerId = @@ IDENTITY' –