代码之家  ›  专栏  ›  技术社区  ›  Seth Petry-Johnson

使用DataContext.ExecuteQuery时忽略只读类属性<t>

  •  9
  • Seth Petry-Johnson  · 技术社区  · 15 年前

    在将结果集绑定到对象时,如何告诉Linq数据上下文忽略特定属性或所有只读属性?

    我正在处理一些使用LINQ难以表达的T-SQL语句,因此我使用数据上下文的ExecuteQuery方法将直接的T-SQL传递到数据库。

    如果我的类T有任何只读属性,当数据上下文试图设置这些属性时,我会在运行时得到异常,但由于没有setter属性而失败。如何告诉上下文忽略这些属性?

    这就是我现在要做的。它很管用,但很糟糕:

    public bool IsPaidInFull {
        get { return NetTotal <= 0m; }
        set { /* needed so linq doesn't choke. Should never be set by hand */ }
    }
    
    2 回复  |  直到 12 年前
        1
  •  0
  •   Tion    15 年前

    你考虑过实体的LINQ吗?转换您的项目可能不值得麻烦,这取决于您所处的距离,或者您可以接受多少ORM开销。然而,在LinqToEntities中,这种精确的场景不会是一个问题。加载对象时,它不会尝试更新对象中的只读属性,因为它们没有显式映射,只是扩展属性。

    此外,您可以使用GETTER函数来代替旧的Java/Java路由。public bool getispaidinfull()返回nettotal<=0 m;。

    或者您可以在继承的子类中尝试实现只读属性,但这可能会导致各种类型的问题。

        2
  •  1
  •   AndyClaw    12 年前
    public bool IsPaidInFull
    {
        get { return NetTotal <= 0m; }
        private set { ;}
    }