我試圖更新類交易對象的的EntityFramework,控件創建一個新的對象
public int Id { get; set; }
public System.DateTime Date { get; set; }
public string Remarks { get; set; }
public double Amount { get; set; }
public Nullable<long> GroupId { get; set; }
public long UserId { get; set; }
public virtual ICollection<User> PaidForUsers { get; set; }
public virtual User PaidByUser { get; set; }
元素PaidForUsers是用戶對象的集合
public long Id { get; set; }
public long UserId { get; set; }
這裏Id是自動生成的,UserId是由代碼提供的。
我想要做的是,每當我創建一個新的事務,我應該創建一個新的用戶,只要用戶不存在已經在數據庫中。
我目前使用DbContext.Transactions.Add(新交易)。這顯然會在每次創建新事務時在數據庫中創建一個新用戶。
我目前採用的解決方案是僅爲試圖執行相同操作的用戶實體使用自定義存儲過程。但我也收到以下錯誤
對數據庫的更改已成功提交,但更新對象上下文時發生錯誤。 ObjectContext可能處於不一致的狀態。內部異常消息:由於對象的鍵值與ObjectStateManager中的另一個對象衝突,因此AcceptChanges無法繼續。在調用AcceptChanges之前確保鍵值是唯一的。
這裏是存儲過程 -
ALTER PROCEDURE [dbo].[InsertUser]
(@UserId bigint)
AS
declare @val bigint
declare @countza int
SELECT @val= Id FROM dbo.Users1 where UserId = @UserId
set @countza = @@Rowcount
if @countza = 0
begin
insert into dbo.Users1 (UserId) values (@UserId)
select [Id] from [dbo].[Users1]
where @@ROWCOUNT > 0 and [Id] = scope_identity()
end
else
begin
SELECT 'Id' = @val
end
有一個人能告訴什麼是做到這一點的最好方法是什麼?創建存儲過程是正確的方式嗎?
謝謝,你真的救了我的命。 – Tushar