2010-11-03 25 views
5

Estoy intentando usar LINQ to SQL. Everythign funciona muy bien, pero parece que no es amigable para objetos inmutables.LINQ to SQL e inmutabilidad

LINQ to SQL requiere que cree un constructor sin parámetros para mi clase inmutable. Pero quiero que sea inmutable, por lo que solo quiero permitir que las personas lo creen con todos los parámetros necesarios en cada ocasión.

Del mismo modo, necesito tener instaladores en todos mis miembros.

¿Hay alguna manera de que todavía pueda usar LINQ 2 SQL sin renunciar a mi inmutabilidad?

Aquí está mi código:

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

Será lanzar excepciones sobre ningún colocador y ningún constructor predeterminado sin parámetros.

+0

podría por favor especificar más en detalle ¿cuál es el problema? ¿Qué quiere lograr, qué intentó y por qué falló? – Vlad

+0

@Vlad Puse el código que está causando el problema –

Respuesta

3

Puede crear tipos sin este ctor, y simpy usa el selector para proyectar en ellos. Ya que obviamente no está usando actualizaciones etc no debería importar que no son parte del modelo generará:

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

(donde ImmutableCust no es parte del modelo L2S)

+0

Entonces, ¿necesito hacer un contexto de datos tipado de manera temporal con copias mutables de mis clases y luego usar mis inmutables que expongo al mundo exterior de mi ensamblaje? –

+0

@WCF que debería funcionar, sí. Pruébalo en un pequeño ejemplo primero, obviamente. –

+1

Funciona como un amuleto, pero por supuesto necesito tener el doble de clases pero bueno. –