Как сделать свойство «ReadOnly» в LINQ to SQL? - PullRequest
4 голосов
/ 16 марта 2009

У меня есть свойство («IsLatest»), для которого я установил «Только чтение» на «Истина»

Вот XML:

<Column Name="IsLatest" Type="System.Boolean" DbType="Bit NOT NULL" IsReadOnly="true" CanBeNull="false" />

Почему генератор кода генерирует общедоступный метод доступа 'get' AND 'SET' ?

Кроме того, есть ли способ, чтобы не генерировал SET для свойства только для чтения (что за новая идея)?

ПРИМЕЧАНИЕ. Я использую V2008 SP1 с .NET 3.5 SP1

Ответы [ 3 ]

2 голосов
/ 17 марта 2009

Редактировать: я только что проверил, и он не не создал сеттер ... вы используете 3.5SP1?


Если вы делаете это вручную, я думаю, вы можете; вы просто используете свойство атрибута Storage (на ColumnAttribute), чтобы указать его на поле при обновлении (get удовлетворяет требованиям запроса) ..

1 голос
/ 17 марта 2009

РЕДАКТИРОВАТЬ: я добавил мой успешный обходной путь в нижней части этого ответа.

Это странно ... но если я установлю для свойства "Access" значение , отличное от 'Public' , "set" исчезнет:

С "Access = Public" и "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();
        }
    }
}

С "Access = Protected" и "ReadOnly = True":

protected bool IsLatest
{
    get
    {
        return this._IsLatest;
    }
}

Я не знаю, почему существует эта ошибка (по крайней мере, для меня?), Но если я заставлю ее работать (публично и только для чтения), я обновлю этот ответ.

РЕДАКТИРОВАТЬ: Вот печальный обходной путь:

Я удалил свойство из моего файла DBML, просто добавил свой собственный «частичный» класс и сам установил столбец:

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;
        }
    }
}

Это не то, что я хочу сделать, но, похоже, другого пути нет.

0 голосов
/ 16 марта 2009

Как Linq to Sql сможет присвоить значение этому свойству, если нет установщика? То есть, если он получает данные из базы данных, будь то запрос Linq или результат процедуры хранения, Linq должен иметь возможность создавать эти объекты для вас на основе этих результатов. Если нет заданного свойства, оно не может этого сделать.

...