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