簡體   English   中英

在Entity Framework中更新關系會產生SQL錯誤

[英]Updating a relationship in Entity Framework generates SQL error

我在這里頭疼。 我在Session和User對象之間建立了一對零或一對一的關系,該關系是在Entity Framework 4中使用模型優先方法設計的。

  • 一個用戶應該有一個會話( 一個
  • 會話可以有一個用戶( 零對一 )。

因此,在運行時,我使用

Session session = context.Sessions.FirstOrDefault(s => s.Token.Equals(token));

然后我創建一個用戶,根據這樣的用戶輸入創建

user = context.Users.Create();

user.GUID = Guid.NewGuid();
user.Username = username;
user.Firstname = firstname;
user.Lastname = lastname;
user.Session = session;

context.Users.Add(user);
context.SaveChanges();

當我保存時,SQL Server引發異常,告訴我我嘗試插入數據庫中的GUID已經存在,因為是的,確實如此。 問題是,它不應該插入,它應該更新會話並填充它所屬的forein鍵。 外鍵位於關系的用戶端,這樣可以嗎?

編輯用戶為新用戶。 更新用戶不是我要完成的工作。 同樣,該錯誤是因為代碼試圖插入具有相同主鍵值的會話,而不僅僅是更新它的前鍵。

這是應該執行的時間順序列表:

  • 會話已創建
  • 會話已保存
  • 從數據庫中選擇會話
  • 用戶被創建
  • 用戶<->會話關系已設置
  • 用戶被保存

我得到的是:

違反PRIMARY KEY約束“ PK_Sessions”。 無法在對象“ dbo.Sessions”中插入重復密鑰。 重復的鍵值為VALUE 該語句已終止。

請幫幫我,過去2個小時我一直在擺弄。

編輯:更改了我的答案以反映更改后的問題描述:)

確保在處理此類更新時始終使用相同的上下文實例。

這里似乎正在發生的事情是,在一個上下文中檢索了會話,但是將用戶保存在該上下文的另一個實例中。 因此,在新的背景下,該會議被視為是新會議,因此被(錯誤地)插入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM