У меня странное поведение в Linq to Sql ...
У меня есть простой родитель | дочерняя (один ко многим) объектная модель. В моем приложении я создаю родительский объект и заполняю все дочерние элементы в памяти, а затем вызываю метод add моего репозитория, чтобы вставить обоих родителей вместе с его дочерними элементами.
Теперь из моего приложения (winform) все работает правильно, как и ожидалось, но я настроил небольшой метод в своем проекте модульного теста, просто чтобы выполнить метод добавления репозитория (я знаю, что это не модульный тест, так как я нажимаю базы данных) и из метода test возвращает исключение «оператор INSERT, конфликтующий с ограничением FOREIGN KEY».
Я проследил как вызов, так и их получение, правильно созданный родительский объект (т. Е. У родителя есть список дочерних элементов, а у каждого дочернего элемента есть ссылка на родительский идентификатор и родительский объект).
Мой метод вставки выглядит следующим образом:
public void AddStartList(StartList list)
{
using (MyDataContext context = new MyDataContext())
{
context.Log = Console.Out;
context.StartLists.InsertOnSubmit(list);
context.SubmitChanges();
}
}
И выходной журнал из linq выглядит одинаково, за исключением второго дочернего элемента (в случае метода теста), он не может связать parentId с дочерним элементом
Выходной журнал для одного РАБОТЫ -
INSERT INTO [dbo].[StartLists]([Name], [TargetControl], [FirstCarDue], [Status])
VALUES (@p0, @p1, @p2, @p3)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input VarChar (Size = 4; Prec = 0; Scale = 0) [Test]
-- @p1: Input Char (Size = 10; Prec = 0; Scale = 0) [CH0]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [1/1/2009 8:00:00 AM]
-- @p3: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2005) Model: MappedMetaModel Build: 3.5.30729.1
INSERT INTO [dbo].[StartListEntries]([StartListId], [CarNo], [StartTime], [Order], [Notas])
VALUES (@p0, @p1, @p2, @p3, @p4)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [18]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [1/1/2009 8:00:00 AM]
-- @p3: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p4: Input VarChar (Size = 0; Prec = 0; Scale = 0) [Null]
-- Context: SqlProvider(Sql2005) Model: MappedMetaModel Build: 3.5.30729.1
INSERT INTO [dbo].[StartListEntries]([StartListId], [CarNo], [StartTime], [Order], [Notas])
VALUES (@p0, @p1, @p2, @p3, @p4)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [18]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [1/1/2009 8:01:00 AM]
-- @p3: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- @p4: Input VarChar (Size = 0; Prec = 0; Scale = 0) [Null]
-- Context: SqlProvider(Sql2005) Model: MappedMetaModel Build: 3.5.30729.1
и тот, который не работает:
INSERT INTO [dbo].[StartLists]([Name], [TargetControl], [FirstCarDue], [Status])
VALUES (@p0, @p1, @p2, @p3)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input VarChar (Size = 4; Prec = 0; Scale = 0) [Test]
-- @p1: Input Char (Size = 10; Prec = 0; Scale = 0) [CH0]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [1/1/2009 8:00:00 AM]
-- @p3: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2005) Model: MappedMetaModel Build: 3.5.30729.1
INSERT INTO [dbo].[StartListEntries]([StartListId], [CarNo], [StartTime], [Order], [Notas])
VALUES (@p0, @p1, @p2, @p3, @p4)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [19]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [1/1/2009 8:00:00 AM]
-- @p3: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p4: Input VarChar (Size = 0; Prec = 0; Scale = 0) [Null]
-- Context: SqlProvider(Sql2005) Model: MappedMetaModel Build: 3.5.30729.1
INSERT INTO [dbo].[StartListEntries]([StartListId], [CarNo], [StartTime], [Order], [Notas])
VALUES (@p0, @p1, @p2, @p3, @p4)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [0] **<<----- THIS ONE SHOULD BE 19!!!**
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [1/1/2009 8:01:00 AM]
-- @p3: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- @p4: Input VarChar (Size = 0; Prec = 0; Scale = 0) [Null]
-- Context: SqlProvider(Sql2005) Model: MappedMetaModel Build: 3.5.30729.1
Есть идеи?
PS. Извините за длинный пост