0

EF-SaveChanges의 모든 게시물을 읽었으며 내 대답이 해당 게시물에있는 것으로 믿지 않습니다.EntityFramework - SaveChanges는 저장하지 않지만 프로파일 러에 나타나는 SQL

저는 C#, .NET 4, EF 4.3.1, SQL Server 2008R2, VS 2k11 Beta, AutoMapper를 사용하고 있습니다. 여기

내 코드입니다 :

using (Model.AnimalRescueEntities context = new Model.AnimalRescueEntities()) 
{ 
    using (TransactionScope transaction = new TransactionScope()) 
    { 
     context.Connection.Open(); 

     //Retrieve the event 
     eventDB = context.Events.Single(e => e.ID == eventRegVM.EventID); 
     eventOrgBaseDB = context.Entity_Base.Single(b => b.ID == eventDB.Entity_Organisation.ID); 
     eventRegVM.Event = Mapper.Map<Model.Event, EventsViewModel>(eventDB); 
     eventRegVM.Event.Entity_Organisation.Entity_Base = Mapper.Map<Model.Entity_Base, Entity_BaseViewModel>(eventOrgBaseDB); 

     //saves Event_Registration 
     eventRegDB = Mapper.Map<Event_RegistrationViewModel, Model.Event_Registration>(eventRegVM); 
     eventRegDB.Event = eventDB; 
     eventRegDB.EventID = eventDB.ID; 
     eventRegDB.Event.Entity_Organisation = context.Entity_Organisation.Single(o => o.ID == eventOrgBaseDB.ID); 
     eventRegDB.Event.Entity_Organisation.Entity_Base = eventOrgBaseDB; 

     //Add the link between EVENT and REGISTRATION 
     context.Event_Registration.AddObject(eventRegDB); 
     int numChanges = context.SaveChanges(); 

     var regs = context.Event_Registration.Where(r => r.ID != null).ToList(); 
    } 
} 

내가 SQL 프로파일 러가 백그라운드에서 실행하고 SaveChanges를 호출 할 때 나는이 SQL 코드를 볼 (numChanges은 1) :

exec sp_executesql N'declare @generated_keys table([ID] uniqueidentifier) 
insert [dbo].[Event_Registration]([EventID], [DateSubmitted], [HasPaid], [PaymentMethod], [Comments], [AmountPaid]) 
output inserted.[ID] into @generated_keys 
values (@0, @1, null, @2, null, @3) 
select t.[ID] 
from @generated_keys as g join [dbo].[Event_Registration] as t on g.[ID] = t.[ID] 
where @@ROWCOUNT > 0',N'@0 uniqueidentifier,@1 datetime2(7),@2 int,@3 decimal(19,4)',@0='1D841F75-AEA1-4ED1-B3F0-4E3994D7FC0D',@1='2012-07-04 14:59:45.5239309',@2=0,@3=0 

reg에는 3 개의 행과 새 행이 있습니다. 그러나 SQL Server에서 SELECT 문을 실행하고 새 행을 볼 수는 없습니다. 이 작업을 여러 번 실행하면 데이터베이스의 기존 행 세 개와 데이터베이스로 연결되지 않는 새 네 번째 행이 같은 결과를 얻게됩니다.

eventRegDB에는 기본 키 ID에 대해 생성 된 GUID도 포함됩니다. 나는 SQL 서버가 100 % 확신하지는 않는다고 가정한다.

위의 TSQL을 가져 와서 내 데이터베이스에 대한 쿼리 창에서 실행했습니다. 그 후에 내 Event_Registration 테이블에 새 행이 생깁니다. 즉, 세 개의 기존 행이 생성 된 방법입니다.

지금 예외 또는 기타 오류가 발생하여 데이터베이스에 저장되지 않는 이유를 찾을 수 없습니다. 어떤 아이디어? SQL에 대한 스키마, 데이터베이스 (코드의 일부 또는 전부)를 재 작성하는 방법을 묻고 싶다면 -이 모든 것이 http://animalrescue.codeplex.com/에 호스팅되어 있지만 아직이 코드를 저장하지 않았습니다.

답변

1

transaction.Complete()이 누락되었으므로 트랜잭션이 커밋되지 않습니다. TransactionScope에 대한 using 블록이 트랜잭션을 완료하면 롤백됩니다.

+0

감사합니다. 다행스럽게도 내가 놓친 간단한 일이었습니다! – boltojam