una tipos tipo solo puede procedimientos primitivos este español enumeración entidad ejemplos contexto consultas consulta construir complejo comandos almacenados admiten c# .net linq linq-to-sql

tipos - procedimientos almacenados linq to sql c#



¿Cómo excluyo a un miembro de la asignación de Linq-To-Sql? (4)

Intenta declarar la columna como una columna calculada como esa:

public class MyClass { [Column(Name="StoredColumn", DbType="int")] public int Stored; [Column(Name="ForDisplay", Expression="StoredColumn * 1000")] public int ForDisplay { get { return Stored * 1000; } } }

Eso debería funcionar.

Tengo esta clase:

public class MyClass { [Column(Name="StoredColumn", DbType="int")] public int Stored; public int ForDisplay { get { return Stored * 1000; } } }

El objetivo es que ForDisplay no se almacene en la base de datos; solo lo necesito para un código más conveniente.

Intento ejecutar una consulta SQL que devuelve un conjunto de filas y obtener esta InvalidOperationException :

No se puede asignar valor al miembro ''ForDisplay''. No define un setter.

No quiero que ForDisplay sea ​​tocado por Linq-To-Sql. ¿Cómo decirle a Ling-To-Sql que no lo toque?


Puede extender linq2sql con clases parciales. El elemento clave no es modificar la clase original sino crear una clase parcial adicional:

public partial class MyClass { public int ForDisplay { get { return this._Stored * 1000; } } }


No necesita decirle a Linq que no debe tocar la propiedad "ForDisplay". Normalmente, todas las propiedades que no están marcadas específicamente con el atributo Column se tratan como parte transitoria de la lógica de la aplicación y no se conservan o recuperan de la base de datos.

Sin embargo, si desea recuperar algunos registros de la base de datos a través de un procedimiento almacenado, digamos GetMyClasses , el diseñador creará una nueva clase GetMyClassesResult . Si miras el código generado, entonces notarás que la clase no está decorada con el atributo Table . En ese caso, el asignador asume que cada propiedad debe ser asignada. Si hay una propiedad sin valor correspondiente en la consulta, el asignador intentará establecer la propiedad como predeterminada (T), pero como no hay definidor, se lanzará la excepción.

De todos modos, para hacer una larga historia corta, simplemente agregando

[Table] public class MyClass { ... }

a su clase debe solucionar el problema.


Mi problema era con el valor de retorno de una función de valor de tabla donde el modelo no decoraba

[Table]

en la clase Puedo confirmar que agregando [Table] a mi clase parcial extra funcionó.

[Table] public partial class MyClassFromTVF { public int ForDisplay { get { return Stored * 1000; } } }