0

我正在使用實體框架4自我跟蹤實體模板(STE)和SQL Server CE。我看到一些非常奇怪的行爲。一切都很好,如果我只是插入或更新,刪除。但是,如果我插入一個對象,然後將其更新爲UPDATE,並且INSERT SQL語句將在執行更新時爲對象生成(請參見下文)。SQL插入生成以及更新時更新

我正在使用存儲庫模式並處理存儲庫併爲每個調用包裝ObjectContext,因此更新使用新的ObjectContext。另請注意,如果我重新啓動服務器,對象的更新工作正常,所以只有在插入對象的情況下。

由於我使用的是STE,因此更新不會「通常」ApplyChangesSaveChanges

的初始插件的軌跡是:

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 =============== 

我已經用盡一切想我是什麼原因造成這讓你有一個可以讓我的任何想法欣賞一個新的方向。

感謝, 裏克

回答

0

嘗試調用AcceptChangesMarkAsUnchanged在你的實體您插入成功後。