【发布时间】:2012-07-04 20:38:36
【问题描述】:
我已经阅读了关于 EF-SaveChanges 的大多数帖子,并且不相信我的答案存在于这些帖子中。
我正在使用 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 Profiler,当调用 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
regs 将包含三个现有行和我的新行。但是,我无法在 SQL Server 中运行 SELECT 语句并查看我的新行。多次运行会得到相同的结果 - 数据库中现有的三行和永远不会进入数据库的新的第四行。
eventRegDB 还包含为主键创建的 GUID,ID;我假设 SQL Server 会这样做,但不能 100% 确定这一点。
我已采用上述 TSQL 并在查询窗口中针对我的数据库运行它 - 之后我在 Event_Registration 表中获得了新行 - 这就是三个现有行的创建方式。
我现在看到生成的异常或其他错误,找不到任何不保存到数据库的原因。有任何想法吗?如果您想查看 SQL 的架构、如何重新创建数据库、代码(任何或全部),然后询问 - 这些都托管在 http://animalrescue.codeplex.com/ 上,但我还没有存储此代码。
【问题讨论】:
标签: asp.net-mvc-3 c#-4.0 sql-server-2008-r2 entity-framework-4.3