在数据库中使用整数更有意义,但我想假装它始终是字符串(而不是与int对应的字符串),因为它更简单。
这背后的原因是,面向用户的视图是字符串的加密版本,但我从来不想看到int,除非直接使用数据库(int是一个IDENTITY列)。
我有一个想要替换的LINQ映射。基本上,我希望替换这个(它在设计器中)
[global::System.Data.Linq.Mapping.ColumnAttribute] //...
public int TID
{
get
{
return this._TID;
}
set
{
if ((this._TID != value))
{
this.OnTIDChanging(value);
this.SendPropertyChanging();
this._TID = value;
this.SendPropertyChanged("TID");
this.OnTIDChanged();
}
}
}
与
[global::System.Data.Linq.Mapping.ColumnAttribute] //...
public string TID
{
get
{
return Convert.ToString(this._TID + 5);
}
set
{
if ((this._TID - 5 != Int32.Parse(value)))
{
this.OnTIDChanging(value);
this.SendPropertyChanging();
this._TID = Int32.Parse(value) - 5;
this.SendPropertyChanged("TID");
this.OnTIDChanged();
}
}
}
这将允许我,例如,在LinqDataSource
的WhereParameters
中使用asp:QueryStringParameter
,而不是在代码后面重新映射查询字符串。
不要像那样重新映射,尝试扩展linq类并为该类添加一个新的属性
Public string TIDstring
{
get { return (this.TID + 5).toString(); }
set
{
int val = 0;
if (int.TryParse(value, out val)
this.TID = val - 5;
else
throw new Exception("Invalid TID Value")
}
}
如何使用SqlDataSource
的Where
属性来做这样的事情:
Where = "it.[TID] = (@TID - 5)"