我在 sql server 2008 中有一个常规视图,并且我正在使用实体框架从数据库方法生成设计。我已经知道实体框架中视图的关键问题,但这不是我的解决方案。当我从视图中查询 select * 时,它带出了 3 行,这是正确的,但所有行都是相同的,并且是数据库视图中的第一行。
一些帮助将不胜感激。
我在 sql server 2008 中有一个常规视图,并且我正在使用实体框架从数据库方法生成设计。我已经知道实体框架中视图的关键问题,但这不是我的解决方案。当我从视图中查询 select * 时,它带出了 3 行,这是正确的,但所有行都是相同的,并且是数据库视图中的第一行。
一些帮助将不胜感激。
我已经知道实体框架中视图的关键问题,但这不是我的解决方案。当我从视图中查询 select * 时,它带出了 3 行,这是正确的,但所有行都是相同的,并且是数据库视图中的第一行。
您所描述的正是由错误的密钥引起的问题。您的三行必须具有唯一标识 - 某些列或一组列必须唯一标识每个可能返回的记录。这些列必须在设计器中设置为实体键。
您还可以通过在从视图加载数据时不使用更改跟踪来避免此问题,因为返回的实体是只读的。您必须为此MergeOption.NoTracking
使用ObjectSet
:
context.MyViewEntities.MergeOption = MergeOption.NoTracking;
var data = context.MyViewEntities.ToList();