Linq生成表中的自定义属性

时间:2011-04-29 18:11:07

标签: c# asp.net linq linq-to-sql

在数据库中使用整数更有意义,但我想假装它总是一个字符串(而不是与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();
        }
    }
}

这样我就可以在asp:QueryStringParameter的{​​{1}}中使用WhereParameters,而不是在代码隐藏中重新映射查询字符串。

2 个答案:

答案 0 :(得分:1)

不要像这样重新映射,而是尝试扩展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")
    }

}

答案 1 :(得分:0)

如何使用Where的{​​{1}}属性执行以下操作:

SqlDataSource