2010-11-03 105 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