具有DateTime条件的派生类型

时间:2009-06-23 02:28:51

标签: entity-framework

我有一个Show表,我希望有一个名为ActiveShow的派生类型,它只返回将来的节目

Show.ShowDateTime > DateTime.Now

有没有办法可以使用设计器或其他方式实现这一点,以便创建ActiveShow的实例始终遵循日期条件?

1 个答案:

答案 0 :(得分:1)

绝对可以使用SSDL中的DefiningQuery(实际上是TSQL视图)来做到这一点。

但我不推荐它。

问题是类型成员资格是暂时的,它应该是永久性的,或者至少要求你明确地改变它。

即。你最终可能会遇到某种情况,即ActiveShow(并在内存中加载),但如果你进行后续查询,你可能会尝试加载与Show相同的对象。在这种情况下,身份解析会发生什么,这是任何人的猜测。

这很可能会产生一些非常令人讨厌的意外副作用。

作为替代方案,您的上下文中的额外属性可能会添加到分部类中:

即。

public partial class MyContext
{
    public ObjectQuery<Show> ActiveShows
    {
       get{
           return this.Shows.Where(s => ShowDateTime > DateTime.Now) 
                  as ObjectQuery<Show>;
       }
    }
}

这可能会给你带来大部分好处而没有大部分风险。

希望这有帮助

亚历