我有一个属性(“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
答案 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必须能够根据这些结果为您创建这些对象。如果没有设置属性,则无法执行此操作。