¿Cómo hago una propiedad 'ReadOnly' en LINQ to SQL?
-
19-08-2019 - |
Pregunta
Tengo una propiedad (" IsLatest ") que configuré 'Solo lectura' en 'Verdadero'
Aquí está el XML:
<Column Name="IsLatest" Type="System.Boolean" DbType="Bit NOT NULL" IsReadOnly="true" CanBeNull="false" />
¿Por qué el generador de código genera un acceso público 'get' AND 'SET' ?
Además, ¿hay alguna manera de que no genere un SET para una propiedad de solo lectura (qué idea tan novedosa)?
NOTA: Estoy usando V2008 SP1 con .NET 3.5 SP1
Solución 2
EDITAR: he agregado mi solución exitosa al final de esta respuesta.
Esto es extraño ... pero, si configuro el " Acceso " propiedad de cualquier cosa que no sea 'Público' , el " conjunto " desaparece:
Con " Access = Public " y " ReadOnly = True " ;:
public bool IsLatest
{
get
{
return this._IsLatest;
}
set
{
if ((this._IsLatest != value))
{
this.OnIsLatestChanging(value);
this.SendPropertyChanging();
this._IsLatest = value;
this.SendPropertyChanged("IsLatest");
this.OnIsLatestChanged();
}
}
}
Con " Access = Protegido " y " ReadOnly = True " ;:
protected bool IsLatest
{
get
{
return this._IsLatest;
}
}
No sé por qué existe este error (¿para mí al menos?) pero si hago que esto funcione (público y solo lectura), actualizaré esta respuesta.
EDITAR: Aquí está la triste solución:
Eliminé la propiedad de mi archivo DBML y simplemente agregué mi propio "parcial". clase y establecer la columna yo mismo:
public partial class ServicerData
{
private bool _IsLatest = default(bool);
[Column(Storage = "_IsLatest", AutoSync = AutoSync.Always, DbType = "Bit NOT NULL", IsDbGenerated = true, UpdateCheck = UpdateCheck.Never)]
public bool IsLatest
{
get
{
return this._IsLatest;
}
}
}
Esto no es lo que quiero hacer, pero parece que no hay otra manera.
Otros consejos
Editar: acabo de comprobar, y no generó un setter ... ¿estás usando 3.5SP1?
Si lo haces a mano, creo que puedes; simplemente usa la propiedad de atributo Almacenamiento (en ColumnAttribute
) para apuntarlo al campo cuando se actualiza (el get satisface los requisitos de consulta) ..
¿Cómo podrá Linq to Sql asignar un valor a esta propiedad si no hay setter? Lo que significa que si recupera datos de la Base de datos, ya sea a través de una consulta de Linq o un resultado de un Procedimiento de almacenamiento, Linq debe poder crear estos objetos para usted en función de esos resultados. Si no hay una propiedad establecida, no puede hacer eso.