私は 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 プロファイラーを実行していて、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には、既存の 3 つの行と新しい行が含まれます。ただし、SQL Server で SELECT ステートメントを実行できず、新しい行が表示されません。これを何度も実行すると、同じ結果が得られます。データベース内に 3 つの既存の行があり、データベースに到達しない新しい 4 行目です。
eventRegDBには、主キー ID 用に作成された GUID も含まれています。SQLサーバーがこれを行うと思いますが、100%確実ではありません。
上記の TSQL を取得し、データベースに対してクエリ ウィンドウで実行しました。その後、Event_Registration テーブルに新しい行を取得しました。これにより、3 つの既存の行が作成されました。
例外やその他のエラーが生成されていることがわかりましたが、これがデータベースに保存されない理由が見つかりません。何か案は?SQL のスキーマ、データベースの再作成方法、コード (一部またはすべて) を確認したい場合は、質問してください。これはすべてhttp://animalrescue.codeplex.com/でホストされていますが、保存していません。コード、まだ。