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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top