2009-11-19 80 views
2

我性學習的LINQ到SQL現在,我已經寫了一個簡單的應用程序定義的SQL數據:LINQ到SQL和SQL精簡 - 數據庫文件共享問題

[Table(Name = "items")] 
    public class Item 
    { 
    [ Column(IsPrimaryKey = true, IsDbGenerated = true) ] 
    public int Id; 
    [ Column ] 
    public string Name; 
    } 

我已經推出了2款連接到相同.sdf文件的應用程序副本,並測試一個應用程序中的所有數據庫修改是否會影響另一個應用程序但奇怪的事情出現了。如果我在一個應用程序中使用InsertOnSubmit()和DeleteOnSubmit(),添加/刪除的項目通過「選擇」LINQ隊列即時顯示在其他應用程序中。但如果我嘗試修改一個應用程序中「姓名」字段,它是不是在其他的一個應用可見,直到它重新連接數據庫:(測試代碼我使用:

var Items = from c in db.Items 
       where Id == c.Id 
       select c; 
    foreach(var Item in Items) 
    { 
    Item.Name = "new name"; 
    break; 
    } 
    db.SubmitChanges(); 

任何人都可以建議我在做什麼錯誤以及爲什麼InsertOnSubmit()/ DeleteOnSubmit工作和SubmitChanges()不工作?

回答

2

這與Linq-to-sql如何管理Object Identity有關如果您多次查詢同一個實體,代表的相同對象

當您insertdelete實體,您可以看到來自另一個客戶端的更改,因爲Linq-to-Sql需要創建/刪除與這些實體關聯的對象,並且如果沒有衝突,則這沒有任何問題。

更新具有不同的行爲,這在Object Identity文章中有解釋。

的LINQ to SQL使用這種方法來 爲了支持樂觀 更新管理本地對象 的完整性。因爲 在對象創建後最初發生的 發生的唯一更改是由 應用程序創建的那些更改,因此應用程序的意圖很明確。

如果需要從數據庫中的最新數據,使用DataContext.RefreshRefreshMode.OverwriteCurrentValues