如何在LINQ to SQL中创建“ReadOnly”属性?

时间:2009-03-16 18:19:13

标签: .net linq-to-sql readonly

我有一个属性(“IsLatest”)我已将“只读”设置为“True”

这是XML:

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

为什么代码生成器会生成一个公共'get'和'SET'访问器?

另外,有没有办法让为只读属性生成一个SET(这是一个多么新颖的想法)?

注意:我正在使用V2008 SP1和.NET 3.5 SP1

3 个答案:

答案 0 :(得分:2)

编辑:我刚检查过,没有生成一个setter ......你使用的是3.5SP1吗?


如果你是手工做,我想你可以;您只需使用Storage属性属性(在ColumnAttribute上)在更新时将其指向字段(get满足查询要求)..

答案 1 :(得分:1)

编辑:我已将我成功的解决方法添加到此答案的底部。

这很奇怪......但是,如果我将“访问”属性设置为除“公共”以外的任何内容,则“设置”就会消失:

使用“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;
        }
    }
}

这不是我想做的,但似乎没有别的办法。

答案 2 :(得分:0)

如果没有setter,Linq to Sql如何能够为此属性赋值?这意味着如果它从数据库中获取数据,无论是通过Linq查询,还是来自存储过程的结果,Linq必须能够根据这些结果为您创建这些对象。如果没有设置属性,则无法执行此操作。