C# 不使用实体模型中的视图打印重复值

C# 不使用实体模型中的视图打印重复值,c#,entity-framework,silverlight-4.0,entity-framework-4.1,C#,Entity Framework,Silverlight 4.0,Entity Framework 4.1,我正在使用实体模型。我更新了一个名为SalesDetialView的视图 在salesdetialview中,我有3个实体键。有1.类型2.否,3.Custmor SQL:我正在使用这个查询(我只打印了5列) 从SalesDetailView中选择客户、类型、编号、销售人员、金额 但通过实体模型,我不会得到重复的值(否)。请参见下面的屏幕 现在我怀疑为什么它没有显示重复的值。与实体键或任何对象相关的任何对象。请告诉我哪里出错。如果多行在主列中共享相同的值,则似乎只有第一行从数据库中检索并复制

我正在使用实体模型。我更新了一个名为SalesDetialView的视图

在salesdetialview中,我有3个实体键。有1.类型2.否,3.Custmor

SQL:我正在使用这个查询(我只打印了5列)

从SalesDetailView中选择客户、类型、编号、销售人员、金额

但通过实体模型,我不会得到重复的值(否)。请参见下面的屏幕


现在我怀疑为什么它没有显示重复的值。与实体键或任何对象相关的任何对象。请告诉我哪里出错。

如果多行在主列中共享相同的值,则似乎只有第一行从数据库中检索并复制到这些其他行中。例如,如果一个集合有两列,第一列被标记为主列,并且

the correct result should be:

A, 1
A, 2
B, 4
B, 6
B, 7
C, 5


The actual result in code with Entity Framework would become:


A, 1
A, 1
B, 4
B, 4
B, 4
C, 5
在实体模型中包含视图时,模型似乎只是将第一个不可为null的列用作主键(因为主键中使用的所有列都应该不可为null)。 要解决此问题,请确保正确选择了主键列。如果由于空值或没有每行不同的列集而无法创建正确的主键,请尝试向视图中添加一列,该列始终包含每行的唯一值。添加后,请确保将其设置为实体模型中的主键


如果我在上面的示例中将两行都设置为主列,我将得到所需的结果。

您可以通过更改
对象集的合并选项来解决此问题。例如:

 using (TargetDBDataContext db = new TargetDBDataContext())
        {
            db.SomeView.MergeOption = System.Data.Objects.MergeOption.NoTracking;
            return db. SomeView.ToList();
        }

使用主列,我们不会显示重复项。但在我看来,它没有pk列。在sql中运行quary时,它将显示所有行。但不是通过实体模型。EF发出什么查询?