C# 通过搜索视图实体返回表实体的最佳实践

C# 通过搜索视图实体返回表实体的最佳实践,c#,asp.net,entity-framework,entity-framework-5,C#,Asp.net,Entity Framework,Entity Framework 5,我目前有一个数据库,它使用视图将来自多个联接的数据展平,并作为网页的只读界面显示。这些视图基本上基于单个实体表 例如,我有一个表tblUser,我有一个视图viewUser。该视图显然是表中的数据以及其他一些查找表的视图。现在,我需要更新/检索tblUser实体,但要基于视图中的一些扩展字段,例如域、用户状态和类型 因此,我的问题是,根据仅在视图中可用的搜索条件检查和检索表实体的最佳方法是什么?目前我做的事情如下: viewUser view = context.viewUsers.Si

我目前有一个数据库,它使用视图将来自多个联接的数据展平,并作为网页的只读界面显示。这些视图基本上基于单个实体表

例如,我有一个表
tblUser
,我有一个视图
viewUser
。该视图显然是表中的数据以及其他一些查找表的视图。现在,我需要更新/检索
tblUser
实体,但要基于视图中的一些扩展字段,例如域、用户状态和类型

因此,我的问题是,根据仅在视图中可用的搜索条件检查和检索表实体的最佳方法是什么?目前我做的事情如下:

    viewUser view = context.viewUsers.SingleOrDefault(a => a.Logon == 'test' && a.Domain == 'test' && !a.Deleted);
    tblUser user = (view != null) ? context.tblUsers.Single(a => a.ID == view.ID) : new tblUser();
这似乎有点低效,所以我想知道是否有更好的方法来解决这个问题,因为我的搜索并没有真正揭示出与我的确切问题类似的东西


非常感谢您的帮助。

似乎是对的。为了提高性能,我会将
.SingleOrDefault()
.Single()
更改为
.FirstOrDefault()
.First()

但另一个问题仍然存在。您的
viewUser
tblUser
完全相同吗?

还有,像
viewUser
这样的命名类应该是
viewUser
TblUser

表和视图是不同的,视图包含(并基于)表数据,但也与其他表有连接。我还使用了Single方法,因为我希望确保获得单个/唯一的记录。
First
将返回与您的查询匹配的第一个项目,一旦匹配完成,它将只返回单个项目<另一方面,code>Singel将遍历整个列表,即使匹配完成。但是你的查询没有被关闭。我对这些观点的质疑只是出于好奇。希望有帮助?