我想給部分類中的一個LTS對象添加一個新的構造函數。它應該從數據庫中返回對象的一個實例。基本上,這個想法是獲取LINQ-TO-SQL對象的方法
public Questionnaire(int id)
{
this = (from q in db.Questionnaires
where q.Id == id
select q).SingleOrDefault();
}
我就可以進入每個屬性,並將其設置爲返回的對象,但是這似乎是矯枉過正,如果我改變我的數據庫模式,我必須確保我編輯該代碼。
那麼這樣做的最佳做法是什麼?我無法使用靜態方法,因爲DataContext將無法跟蹤對該對象所做的任何更改。
我需要創建一個新的類實例,然後調用該類的GET方法嗎?即
public Questionnaire Get(int id)
{
return (from q in db.Questionnaires
where q.Id == id
select q).SingleOrDefault();
}
然後用它
這是相當不錯的概念和替代解決我的問題。想看看我想要實現的是否可能。 – Marko 2012-03-21 23:08:33
從我的角度來看,您應該避免使用第一種解決方案,因爲您正在構造函數中創建一個新對象,並將其分配給保存所創建對象的變量。有點奇怪。 至於第二個,它是有效的,買你試圖封裝邏輯到你的域對象。這個邏輯應該屬於你的數據的某種存儲庫(因此是模式的名稱)。 – foliveira 2012-03-21 23:20:21
我發佈的第一個選項只是試圖解釋我想實現的目標。我明白,我不應該混合邏輯和域對象,但是每個單獨的類都需要有自己的訪問數據的方法。Get(),GetAll(),Insert()顯然是不夠的。我在Questionnaire類下有GetAllForClient(...),GetAllForUser(...)等方法,然後User對象將有GetAllByClient(),GetCurrentUser()等。如果我要使用存儲庫模式? – Marko 2012-03-22 00:14:49