代码之家  ›  专栏  ›  技术社区  ›  Kevin Pang

Linq 2 Sql实体中的自动计算属性?

  •  2
  • Kevin Pang  · 技术社区  · 16 年前

    取消日期 最后行动日期

    我希望LastActionDate始终是OrderDate、CancelDate和ShipDate的最新日期。实现这一目标的最佳方式是什么?是否有方法处理这三个日期的OnChanged事件,以便在这些属性发生变化时可以重新计算LastActionDate?或者,是否有一些内置的Linq 2 Sql魔法可以处理这种情况?或者,我只需要确保在更改三个日期中的任何一个时设置LastActionDate吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   marc_s MisterSmith    16 年前

    在Linq-to-SQL模型中,每个实体的每个属性都有一个 分部方法

    但是,如果您确实提供了一个实现,那么确实会调用该实现。由于您的实体类如 Order 如果是分部类,您可以轻松创建自己的附加分部类并定义这些方法。

    所以在你的情况下,你会发现 OrderDateChanged() , CancelDateChanged() ShipDateChanged() .

    从这些方法中,您可以轻松调用一个名为 CalculateLastActionDate()

    public partial class Order
    {
       void OrderDateChanged()
       {
           CalculateLastActionDate();
       }
    
       ......
    
       private void CalculateLastActionDate()
       {
          ... your implementation here
       }
    
    }
    

    马克

        2
  •  0
  •   Mark Seemann    16 年前

    如果你想计算LastActionDate,你不应该把它作为数据库中的一列。

    假设该列不在数据库中,它也不应该是自动生成的L2S代码的一部分。这很好,因为这意味着您可以自己添加它,因为自动生成的L2S类是分部类。

    添加一个新的C#代码文件,并使用与自动生成的Order类完全相同的签名声明Order类,然后添加您的计算属性。大致如下:

    public partial class Order
    {
        public DateTime LastActionDate
        {
            get
            {
                // pick the desired value from the other
                // three properties and return it
            }
        }
    }
    

    注意 partial 类声明中的关键字。