2010-02-22 40 views
0

我是新來WPF,真正以「正確的方式」做事掙扎......這個LINQ保存函數可以接受嗎? (有這樣一個共享的INSERT/UPDATE邏輯?)尋找反饋

public void Save(CompanyContact entityToSave) 
{ 
    try 
    { 

    var saveEntity = (from cc in db.CompanyContacts 
     where cc.CompanyContactId == entityToSave.CompanyContactId 
     select cc).SingleOrDefault(); 

    if (saveEntity == null) 
    { 
     //INSERT logic      
     entityToSave.CreatedById = new CompanyPersonRepository().GetCompanyPerson(DataContext.Default.LoginUsername).CompanyPersonId; 
     entityToSave.ModifiedById = entityToSave.CreatedById; 

     db.CompanyContacts.InsertOnSubmit(entityToSave); 
     db.CompanyContacts.Context.SubmitChanges(); 
    } 
    else 
    { 
     //UPDATE logic    
     saveEntity.ModifiedById = new CompanyPersonRepository().GetCompanyPerson(DataContext.Default.LoginUsername).CompanyPersonId; 
     saveEntity.CompanyId = entityToSave.Company.CompanyId; 
     saveEntity.FirstName = entityToSave.FirstName; 
     saveEntity.LastName = entityToSave.LastName; 
     saveEntity.CompanyContactTypeId = entityToSave.CompanyContactTypeId; 

     db.CompanyContacts.Context.SubmitChanges(); 

    } 

...

如果不是,你可以請提供一些關於它爲什麼不是的評論,或者提供一個更好的方式來編寫LINQ函數的例子,如果我不在正確的道路上?

回答

0

這將工作;您還可以將該記錄作爲變量存儲在表單中,如果該記錄爲null,則該記錄不存在,但如果存在,則需要進行更新。這樣,您可以最大限度地減少查詢,並且可以將表單值分配給一個對象而不是處理兩個對象。或者,如果將LINQ對象綁定到窗體,因爲它實現INotifyPropertyChanged,所以如果在窗體內設置綁定並將對象指定爲datacontext,則任何更改都會立即綁定到對象。

HTH。

+0

感謝您的評論......我對此仍然非常陌生,因此希望您能對我的某些問題提供一些幫助: 如果存在違反數據庫規則的情況,您該怎麼做?當我回答我的問題時,我發現了一個問題: http://stackoverflow.com/questions/2300159/wpf-binding-issue-unique-constraint-violation-on-update-how-to-reject-changes 是否有我可以提供給LINQ的設置值,所以如果違反了數據庫規則,我不需要捕獲SqlException並刷新對象的集合......我似乎很愚蠢,我需要編寫代碼來捕獲和處理數據庫規則違反...... – Skyguard 2010-02-23 22:26:12

+1

嘿,我過去所做的是,每個LINQ列都有一個[Column()]定義(類型ColumnAttribute),您可以使用反射來拉下字段並檢查長度,類型,可空性等...如果你不想走這條路,你可以設置你自己的自定義驗證,然後保存並標記這些錯誤的用戶。除此之外,是的,你必須抓住例外。我所做的是僅爲該請求創建一個上下文,嘗試保存,如果發生錯誤,請通知用戶並讓該上下文死亡。 – 2010-02-24 14:06:13

+1

繼續......這樣,當他們再次保存時,您只需重建對象並在您離開的地方工作。畢竟,表單仍然有基礎數據。 – 2010-02-24 14:07:01

相關問題