我正在使用实体模型。我更新了一个名为SalesDetialView的视图。
在salesdetialview中,我有3个实体键。有1.Type 2.No,3.Custmor
SQL:我正在使用此查询(我只打印5列)
从SalesDetailView中选择客户,类型,否,销售人员,金额
但是通过实体模型,我没有获得重复值(否)。请在屏幕下方
现在我怀疑为什么它没有显示重复值。任何与实体键或任何东西相关的东西。请建议我在哪里做错了。
答案 0 :(得分:1)
如果多个行在主列中共享相同的值,则只会从数据库中检索其中的第一个并将其复制到这些其他行中。例如,如果一个集合有2列,第一列被标记为主列,并且
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
在实体模型中包含视图时,模型似乎只是使用第一个不可为空的列作为主键(因为主键中使用的所有列都应该是不可为空的)。 要解决此问题,请确保正确选择主键列。如果由于空值而无法创建正确的主键,或者根本没有为每行设置不同的列,请尝试向视图添加一列,该列始终包含每行的唯一值。添加后,请确保将其设置为实体模型中的主键。
如果我在上面的示例中将两行都设置为主列,我会得到所需的结果。
答案 1 :(得分:1)
您可以通过更改ObjectSet
的合并选项来解决此问题。示例:
using (TargetDBDataContext db = new TargetDBDataContext())
{
db.SomeView.MergeOption = System.Data.Objects.MergeOption.NoTracking;
return db. SomeView.ToList();
}