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/에 호스팅되어 있지만 아직이 코드를 저장하지 않았습니다.
감사합니다. 다행스럽게도 내가 놓친 간단한 일이었습니다! – boltojam