【问题标题】:When is the value of a property set after a LINQ expression is evaluated?评估 LINQ 表达式后何时设置属性的值?
【发布时间】:2011-03-31 00:44:44
【问题描述】:

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

ExamVersion 类的以下属性由 LINQ to SQL 类 (.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 属性?

我在设置器上放置了一个断点,但它在调试期间从未被调用。没有设置此值的构造函数。

【问题讨论】:

    标签: sql-server linq


    【解决方案1】:

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

    您是否尝试过将私有属性“_SourceSafeVersionNum”更改为获取和设置,然后对私有底层变量进行断点?公共设置器适用于您的应用程序设置变量以便跟踪更改。如果它在从数据库中填充时使用这些属性,则所有属性都会在加载时触发 OnPropertyChanged。

    【讨论】:

    • 我将 _SourceSafeVersionNum 更改为一个属性,并且在访问测试支持字段时它确实中断了。我认为 _SourceSafeVersionNum 是支持字段,而不是属性。如果是属性,为什么没有 getter 和 setter?
    • 这是一个特定于实例的私有属性。 getter 和 setter 实际上为这些私有属性提供了一个入口/返回点。现在这对我们来说是隐藏的,当我们写 public int MyProperty { get;放; .NET 实际上为我们管理私有财产。当您添加一个 get 和一个 set 时,它会为要存储的值创建一个单独的私有实例属性。即 _SourceSafeVersionNum 是该类在内存中的生命周期中实际驻留的信息。
    • 您是否参考了有关 .NET 如何管理这些私有属性的描述?我想了解更多关于它们以及它们如何用于对象构造的信息。
    【解决方案2】:

    假设SourceSafeVersionNumExamVersions 的属性,它应该在查询结果被评估和具体化时设置,这发生在这里:

    return query.ToList();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2012-12-27
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      相关资源
      最近更新 更多