【问题标题】:Partial Class Properties not accessable through LINQ query bound to GridView通过 LINQ 查询绑定到 GridView 无法访问部分类属性
【发布时间】:2010-08-30 12:33:32
【问题描述】:

我已向实体框架生成的部分类添加了一个部分类。我想添加一个可以绑定到我的 GridView 的计算字段。但是,当我尝试访问新属性时,我收到一条错误消息,指出这是对 Entity Framework 的限制。

是否有任何变通方法来完成此操作?

【问题讨论】:

  • 请告诉我们产生错误的代码。

标签: .net asp.net linq entity-framework


【解决方案1】:

如果不查看您的代码,就无法正确诊断您的问题。不过,我有预感……

创建一个分部类并向其添加一个计算属性根本不是问题。将相同的属性绑定到 GridView 也不是问题,因为 GridView 并不关心,只要该属性是公共的并且访问它本身不会引发异常。

但是...您可能会尝试在查询中使用该属性。实体框架和其他所有 ORM 都会对此感到厌烦,因为没有将该属性转换为基础数据存储(可能是 SQL Server)。因此,当 EF 尝试构造查询数据库所需的 SQL 时,它会吓坏并说 “我不知道如何将此属性转换为有效的 SQL”

确保您没有在查询中使用该属性,您应该没问题。

更新:

如果您希望实际能够在结果集中使用计算列,那么您有两个基本选择:

1.) 在数据库中创建一个包含计算列的视图,并将您的实体绑定到该列而不是原始基础表。您的财产现在将合法地与可以查询的东西相关联。

2.) 确保先执行查询并带回完整(未过滤的)结果集,然后使用常规 LINQ to Object 来获得所需的结果。像这样的:

var query = from o in Context.Orders
            where o.Price > 100
            select o;

var orders = from order in query.ToList() // Force query to execute
             where order.ComputedColumn == 42
             select order;

显然,这比选项一效率低,但根据原始查询可能并不可怕。

【讨论】:

  • 啊,是的。这就是我正在做的事情。我什至没有想过 EF 会如何尝试为此创建 SQL。那么...如何使用我的新计算属性获得结果集(包含多个实体)?感谢您的帮助乔希。
  • @James -- 之前有人告诉我,专家是在一个非常狭窄的领域里犯了所有可能的错误的人;)比“哦,是的,我记得那个...... "
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 2023-03-20
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
相关资源
最近更新 更多