2009-06-11 6 views
0

Je vais avoir un comportement étrange à Sql ... LinqLINQ to requête d'insertion sql ne fonctionne pas de projet de test unitaire

J'ai un parent simple, | modèle d'objet enfant (un à plusieurs). Dans mon application, je crée l'objet parent et peuple les enfants en mémoire, puis appelle la méthode add de mon référentiel pour insérer le parent avec ses enfants. Maintenant, à partir de mon application (winform), tout fonctionne correctement comme prévu, mais j'ai mis en place une petite méthode dans mon projet de test unitaire, juste pour exercer la méthode d'ajout de repositorie (je sais pas test unitaire puisque je suis en tapant la base de données), et à partir de la méthode de test, il renvoie une exception "L'instruction INSERT en conflit avec l'exception FOREIGN KEY". J'ai trace à la fois appel et leur recevoir l'objet parent correctement construit (par exemple, parent a une liste d'enfants, et chaque enfant a référence à l'id parent et l'objet parent).

Ma méthode d'insertion ressemble à ceci:

public void AddStartList(StartList list) 
{ 
    using (MyDataContext context = new MyDataContext()) 
    { 
     context.Log = Console.Out; 
     context.StartLists.InsertOnSubmit(list); 
     context.SubmitChanges(); 
    } 
} 

Et le journal de sortie de LINQ à la fois le même aspect, sauf pour le deuxième enfant (dans le cas de la méthode d'essai), il ne peut pas associer le parentId avec l'enfant

le journal de sortie pour celui des travaux est

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 

et celui qui ne fonctionne pas est:

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 

Des idées?

PS. Pardon pour le long post

Répondre

0

Peu importe ... Je faisais une erreur bête sur mon test et n'associait pas correctement le deuxième enfant à sa parente StartList