Linq生成表中的自定义属性

本文关键字:自定义属性 Linq | 更新日期: 2023-09-27 17:53:41

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

这将允许我,例如,在LinqDataSourceWhereParameters中使用asp:QueryStringParameter,而不是在代码后面重新映射查询字符串。

Linq生成表中的自定义属性

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

如何使用SqlDataSourceWhere属性来做这样的事情:

Where = "it.[TID] = (@TID - 5)"