我已将实体框架生成的部分类添加到实体框架中。我想添加一个可以绑定到GridView的计算字段。但是,当我尝试访问新属性时,我收到一条错误消息,指出这是对Entity Framework的限制。
是否有任何工作要做到这一点?
答案 0 :(得分:8)
如果没有看到您的代码,就无法正确诊断您的问题。但是,我有预感......
创建一个局部类并向其添加一个计算属性根本不是问题。将同一属性绑定到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;
显然,这比第一选项效率低,但根据原始查询可能不会很糟糕。