4

「読み取り専用」を「True」に設定したプロパティ (「IsLatest」) があります。

XML は次のとおりです。

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

コード ジェネレーターが public 'get' AND 'SET'アクセサーを生成するのはなぜですか?

また、読み取り専用プロパティの SET を生成しないようにする方法はありますか (斬新なアイデアです)。

注: V2008 SP1 と .NET 3.5 SP1 を使用しています

4

3 に答える 3

2

編集:確認したところ、セッターが生成されませんでした... 3.5SP1を使用していますか?


手作業で行っている場合は、できると思います。更新時に Storage attribute-property ( on ColumnAttribute) を使用してフィールドを指すだけです (get はクエリ要件を満たします)。

于 2009-03-16T23:45:01.537 に答える
1

編集:この回答の最後に、成功した回避策を追加しました。

これは奇妙です...しかし、「アクセス」プロパティを'Public' 以外に設定すると、「セット」は消えます:

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

これは私がやりたいことではありませんが、他に方法がないようです。

于 2009-03-17T11:37:57.267 に答える
0

セッターがない場合、Linq to Sql はどのようにしてこのプロパティに値を割り当てることができますか? つまり、Linq クエリを介してデータベースからデータを取得する場合、またはストア プロシージャからの結果を取得する場合、Linq はそれらの結果に基づいてこれらのオブジェクトを作成できる必要があります。設定されたプロパティがない場合、それはできません。

于 2009-03-16T18:29:28.767 に答える