0

Entity Framework 4 自己追跡エンティティ テンプレート (STE) と SQL Server CE を使用しています。非常に奇妙な動作が見られます。挿入または更新、削除するだけで、すべてがうまく機能します。ただし、オブジェクトを挿入してから更新すると、UPDATE更新INSERTの実行時にオブジェクトに対して SQL ステートメントが生成されます (以下を参照)。

私はリポジトリパターンを使用しており、リポジトリをObjectContext破棄し、呼び出しごとにラップするため、更新では new が使用されObjectContextます。また、サーバーを再起動すると、オブジェクトの更新が正常に機能するため、オブジェクトを挿入した場合のみであることに注意してください。

更新は「通常」ApplyChangesを行いSaveChanges、STEを使用しているためです。

最初の挿入のトレースは次のとおりです。

Creating ComputerEntities
--=============== BEGIN COMMAND ===============

declare @0 UniqueIdentifier set @0 = '2975bbbb-36a1-4c0a-8075-be273a96cd42'
declare @1 Bit set @1 = 'True'
declare @2 UniqueIdentifier set @2 = '2913bff8-9f2b-4965-8e02-5cb2a98f4498'
declare @3 Int set @3 = '2'
declare @4 Int set @4 = '1'
declare @5 NVarChar set @5 = 'test'
declare @6 NVarChar set @6 = 'C:\ProgramData\Kailana\ReVersion\Repositories\Projects\2975bbbb-36a1-4c0a-8075-be273a96cd42\2975bbbb-36a1-4c0a-8075-be273a96cd42'

insert [Repository]([Id], [Enabled], [ComputerId], [SQLVersionId], [ReleaseId], [Name], [Description], [DataSource], [Password], [DbUser], [DbUserPassword])
values (@0, @1, @2, @3, @4, @5, null, @6, null, null, null)

go

--=============== END COMMAND ===============
  • リポジトリの破棄
  • リポジトリのコンテキストを破棄します。

次に更新を行います。生成される SQL は次のとおりです。

Creating ComputerEntities
--=============== BEGIN COMMAND ===============

declare @0 Bit set @0 = 'True'
declare @1 UniqueIdentifier set @1 = '2913bff8-9f2b-4965-8e02-5cb2a98f4498'
declare @2 Int set @2 = '2'
declare @3 Int set @3 = '1'
declare @4 NVarChar set @4 = 'tested'
declare @5 NVarChar set @5 = 'C:\ProgramData\Kailana\ReVersion\Repositories\Projects\2975bbbb-36a1-4c0a-8075-be273a96cd42\2975bbbb-36a1-4c0a-8075-be273a96cd42'
declare @6 UniqueIdentifier set @6 = '2975bbbb-36a1-4c0a-8075-be273a96cd42'

update [Repository]
set [Enabled] = @0, [ComputerId] = @1, [SQLVersionId] = @2, [ReleaseId] = @3, [Name] = @4, [Description] = null, [DataSource] = @5, [Password] = null, [DbUser] = null, [DbUserPassword] = null
where ([Id] = @6)
go

-=============== END COMMAND ===============
--=============== BEGIN COMMAND ===============

declare @0 UniqueIdentifier set @0 = '2975bbbb-36a1-4c0a-8075-be273a96cd42'
declare @1 Bit set @1 = 'True'
declare @2 UniqueIdentifier set @2 = '2913bff8-9f2b-4965-8e02-5cb2a98f4498'
declare @3 Int set @3 = '2'
declare @4 Int set @4 = '1'
declare @5 NVarChar set @5 = 'test'
declare @6 NVarChar set @6 = 'C:\ProgramData\Kailana\ReVersion\Repositories\Projects\2975bbbb-36a1-4c0a-8075-be273a96cd42\2975bbbb-36a1-4c0a-8075-be273a96cd42'

insert [Repository]([Id], [Enabled], [ComputerId], [SQLVersionId], [ReleaseId], [Name], [Description], [DataSource], [Password], [DbUser], [DbUserPassword])
values (@0, @1, @2, @3, @4, @5, null, @6, null, null, null)
go

--=============== END COMMAND ===============

私はこれを引き起こしているものについて私が持っているすべての考えを使い果たしました.

ありがとう、リック

4

1 に答える 1

0

エンティティを正常に挿入した後、エンティティでAcceptChangesまたはを呼び出してみてください。MarkAsUnchanged

于 2012-06-19T08:38:19.170 に答える