Версия строки не совпадает после удаления и повторной вставки
У меня есть таблица с колонкой rowversion.
Я получаю данные по запросу ниже
BEGIN TRANSACTION EVENTS
Declare @eventId int
Create table #tempEvents
(
[EventID] [int] NOT NULL,
)
Insert into #tempEvents
(
[EventID]
)
(Select top(@TopN) [EventID] FROM [dbo].[PolicyEventsOminibus] WITH (UPDLOCK,READPAST) WHERE [PublishStatus] = @PublishStatus)
update [PolicyEventsOminibus] set [PublishStatus]=1 where Eventid in (Select #tempEvents.eventid from #tempEvents)
Select [PolicyEventsOminibus].* FROM [dbo].[PolicyEventsOminibus] WITH (UPDLOCK,READPAST) where Eventid IN(Select #tempEvents.eventid from #tempEvents)
drop TABLE #tempEvents
commit TRANSACTION EVENTS
После получения данных я обновлю статус, используя приведенный ниже запрос, основанный на версии строки
Create PROCEDURE [dbo].[Update_Events]
(
@Publishstatus int,
@PrevPublishstatus int,
@LastUpdatedTimeStamp varchar(100),
@EventID int,
@RowVersion rowversion
)
AS
Update PolicyEventsOminibus
SET
Publishstatus = @Publishstatus ,
LastUpdatedTimeStamp = @LastUpdatedTimeStamp
where EventID = @EventID and [RowVersion] = @RowVersion and Publishstatus =@PrevPublishstatus
Код C# Для вызова процедуры выбора магазина
public List<PolicyEventsOminibus> GetEventsFromOminibus(int publishStatus, int topN)
{
var dmvPlcyEvnts = this.contextObj.GetPolicyEventsOminibusbyEventsContext(publishStatus, topN);
return (List<PolicyEventsOminibus>)dmvPlcyEvnts.ToList();
}
public virtual ObjectResult<PolicyEventsOminibus> GetPolicyEventsOminibusbyEvents(Nullable<int> publishStatus, Nullable<int> topN)
{
var publishStatusParameter = publishStatus.HasValue ?
new ObjectParameter("PublishStatus", publishStatus) :
new ObjectParameter("PublishStatus", typeof(int));
var topNParameter = topN.HasValue ?
new ObjectParameter("TopN", topN) :
new ObjectParameter("TopN", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<PolicyEventsOminibus>("GetPolicyEventsOminibusbyEvents", publishStatusParameter, topNParameter);
}
C# код для вызова обновления хранимой процедуры Update_Events
public int UpdateEventPublishStatus(int eventId, int pubStatus, byte[] rowVersion, int? prevpubStatus)
{
int result = this.contextObj.UpdateDmvPolicyEventsOminibus(pubStatus, prevpubStatus, DateTime.Now.ToString("ddMMyyyyhhmmss"), eventId, rowVersion);
return result;
}
public virtual int Update_DMVPolicyEventsOminibus(Nullable<int> publishstatus, Nullable<int> prevPublishstatus, string lastUpdatedTimeStamp, Nullable<int> eventID, byte[] rowVersion)
{
var publishstatusParameter = publishstatus.HasValue ?
new ObjectParameter("Publishstatus", publishstatus) :
new ObjectParameter("Publishstatus", typeof(int));
var prevPublishstatusParameter = prevPublishstatus.HasValue ?
new ObjectParameter("PrevPublishstatus", prevPublishstatus) :
new ObjectParameter("PrevPublishstatus", typeof(int));
var lastUpdatedTimeStampParameter = lastUpdatedTimeStamp != null ?
new ObjectParameter("LastUpdatedTimeStamp", lastUpdatedTimeStamp) :
new ObjectParameter("LastUpdatedTimeStamp", typeof(string));
var eventIDParameter = eventID.HasValue ?
new ObjectParameter("EventID", eventID) :
new ObjectParameter("EventID", typeof(int));
var rowVersionParameter = rowVersion != null ?
new ObjectParameter("RowVersion", rowVersion) :
new ObjectParameter("RowVersion", typeof(byte[]));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("Update_DMVPolicyEventsOminibus", publishstatusParameter, prevPublishstatusParameter, lastUpdatedTimeStampParameter, eventIDParameter, rowVersionParameter);
}
Но обновление происходит только в первый раз. Если я удаляю строку и вставляю ее снова, а затем, если я запускаю выше хранимые процедуры (Выбор и обновление), я не могу обновить статус, так как версия строки не совпадает со значением БД rowVersion.
Я выполняю хранимую процедуру Обновление, используя контекст объекта Entity Framework ExecuteFunction.
Я не уверен, является ли это проблемой с EF или Auto mapper, который мы используем для отображения сущности в модель Домена.
Буду признателен, если кто-нибудь поможет мне определить проблему?
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.