2010-11-03 106 views
5

我嘗試使用LINQ to SQL。 Everythign很棒,但它似乎對不可變對象不友好。LINQ to SQL和不變性

LINQ to SQL需要我爲我的不可變類創建一個無參數構造函數。但我希望它是不可變的,所以我只想讓人們每次都用所有必需的參數創建它。

同樣,我需要對所有成員都有setter。

有沒有辦法讓我仍然可以使用LINQ 2 SQL而不放棄我的不變性?

這裏是我的代碼:

DataContext db = new DataContext("myconnectistring"); 
Table<MyImmutableType> myImmutableObjects = db.GetTable<MyImmutableType>(); 

這將引發約沒有setter和不帶參數沒有默認構造函數的異常。

+0

請你詳細指定更詳細的問題是什麼?你想要達到什麼目的,你嘗試了什麼,爲什麼失敗? – Vlad 2010-11-03 16:06:01

+0

@Vlad我把導致問題的代碼 – 2010-11-03 16:09:06

回答

3

您可以創建類型而不是此ctor,並簡化使用選擇器投影到它們。既然你明明沒有使用更新等它不應該的問題,他們是不是生成模型的一部分:

from cust in db.Customers 
    ... 
    select new ImmutableCust(
     cust.Id, cust.Name, ...); 

(其中ImmutableCust不是L2S模型的一部分)

+0

所以我需要用我的類的可變副本創建一個storngly類型的數據上下文,然後使用我的不可變的,我暴露給我的程序集的外部世界? – 2010-11-03 16:15:48

+0

@WCF應該工作,是的。顯然,首先嚐試一個小例子。 – 2010-11-03 17:02:09

+1

工作就像一個魅力,但當然我需要有兩班,但哦。 – 2010-11-03 17:22:10