【发布时间】:2012-04-02 14:07:35
【问题描述】:
我刚开始使用 EF,需要一些基本指南
我有一个名为 Persons 的表,其中包含名字、姓氏、生日等信息
现在我将一个数据网格绑定到它(在 WPF 中)并且一切正常
但是我如何为全名(姓氏,名字)创建一个列?
在我过去的项目(ms 访问,asp.net)中,我会创建一个视图名称 viwpersons 并在那里拥有所有计算/计算的列。然后将 UI 绑定到视图
使用 EF,如果您绑定视图,则会出现一些问题
- 你必须一次又一次地删除
definingquery,否则你不能更新 - 当用户编辑姓氏或名字时,该字段不会更新,直到整个数据网格被反弹或刷新
- 插入和删除是完全不可能的
- 即使编辑数据网格连接到表,所以我们可以插入和删除,更改不会反映在应用程序周围的下拉列表等中,因为它们连接到视图的
ObservableCollection,而不是表
所以经过几个星期这样那样的黑客攻击,我决定去“概念”或“逻辑”或其他什么。我从我的 edmx 中删除了视图,并且只使用表格。我正在尝试将我的第一个计算列添加到表中。根据许多博客,我将此添加到我的代码中
Partial Class Person
<System.Runtime.Serialization.DataMember()> ReadOnly Property FullName
Get
Return LastName & ", " & FirstName
End Get
End Property
End Class
但是这种方式也存在一些问题
- 试图对此进行过滤,给我一个错误
Late binding operations cannot be converted to an expression tree.[现在我相信这是真的,因为 mssql 无法过滤这个不存在的字段] - 没有其他应用程序或服务可以直接使用数据库,因为它没有视图,如果所有逻辑都将放在 EF 代码中
- 性能,将字段放入代码中会禁用 mssql 用于汇总和连接数百万条记录的所有“基于集合”的功能(在上面的示例中它无关紧要,但最终我有更多 id 需要的字段,例如余额)
那么,这样做的正确、首选的“EF 方式”是什么?
一切顺利,感谢您的建议
【问题讨论】:
-
有人有什么想法吗?我真的需要一个好的答案。谢谢
标签: sql-server entity-framework view