何时在评估LINQ表达式后设置的属性值?

时间:2011-03-30 16:31:46

标签: sql-server linq

Linq对SQL Server执行查询后,对象的属性何时设置?

ExamVersion类的以下属性是由LINQ to SQL Classes(.dbml)文件生成的。

[Column(Storage="_SourceSafeVersionNum", DbType="Int", UpdateCheck=UpdateCheck.Never)]
public System.Nullable<int> SourceSafeVersionNum
{
    get
    {
        return this._SourceSafeVersionNum;
    }
    set
    {
        if ((this._SourceSafeVersionNum != value))
        {
            this.OnSourceSafeVersionNumChanging(value);
            this.SendPropertyChanging();
            this._SourceSafeVersionNum = value;
            this.SendPropertyChanged("SourceSafeVersionNum");
            this.OnSourceSafeVersionNumChanged();
        }
    }
}

执行此LINQ查询后:

var query = from examVersion in db.ExamVersions
    where examVersion.ExamVersionID == ExamVersionID
    select examVersion;

return query.ToList();

LINQ何时/何地设置SourceSafeVersionNum属性?

我在setter上放置了一个断点,但在调试过程中从不调用它。没有构造函数设置此值。

2 个答案:

答案 0 :(得分:2)

Linq to sql类继承自核心对象,具体取决于您是否使用EF或linq来使用代理类来填充。

您是否尝试过更改私有属性“_SourceSafeVersionNum”以获取get和set,然后断开私有底层变量?公共设置器适用于应用程序设置变量以便跟踪更改时。如果在从DB填充时使用它们,则所有属性都会在加载时触发OnPropertyChanged。

答案 1 :(得分:1)

假设SourceSafeVersionNumExamVersions的属性,则应在查询和实现查询结果时将其设置为:

return query.ToList();

当然,如果查询结果为空列表,则不会设置该属性,因为没有对象可以设置它。