【问题标题】:MVC5 model grouping results incorrectlyMVC5 模型分组结果不正确
【发布时间】:2016-07-20 06:45:48
【问题描述】:

MVC5 内网站点。一个视图有两个数据集发送到该视图。这将正确显示数据。但数据是“错误的”。 这是c#代码

 List<object> myList = new List<object>();
        myList.Add(db.hw_poapp_VoucherDetail_vw.Where(a => a.trx_ctrl_num == id).ToList());
        myList.Add(db.hw_poapp_VoucherDetailNotes_vw.Where(a => a.trx_ctrl_num == id).ToList());
        // try this incase it's a Lambda thing
        var notes = from d in db.hw_poapp_VoucherDetailNotes_vw
                    where d.trx_ctrl_num == id
                    select d;

        return View(myList);

我可以使用 SQL 探查器来捕获正在使用的 SQL 并在 SQL 管理工作室中运行它以将结果返回为

trx_ctrl_num        invoice_link           note
VO205164            X:\SOME.pdf            Note 1
VO205164            X:\XXXXX12345.txt      Note 1
VO205164            X:\Tiny 2.jpg          Note 1

单个交易附三个链接,每个链接都有备注

当我调试 c# 时,结果不符合预期。 调试第二个列表(或绝望的 var 注释)我期望 3 个不同的结果,但它出现是因为“注释”字段是相同的,三个结果是相同的。 即三个结果,但所有结果的第一行。 如果“注释”字段包含唯一数据,则这些行将按预期放入列表中 有关调试的屏幕转储,请参见附件 jpg From Debugging code

我正在获取数据的模型类如下所示

public partial class hw_poapp_VoucherDetailNotes_vw
{
    [Key]
    [Display(Name = "Voucher No:")]
    public string trx_ctrl_num { get; set; }
    [Display(Name = "Voucher Link")]
    public string invoice_link { get; set; }
    [Display(Name = "Note:")]
    public string note { get; set; }
}

我尝试过使用和不使用键值 因此,总而言之,运行的 SQL 选择了正确的数据。 列表,无论是使用 Lambda 还是 LINQ,第一行都重复了 3 次 视图正确显示错误数据。 感谢您提供任何帮助

【问题讨论】:

  • 笔记的表格设置是什么?它有交易ID吗?
  • 我正在查看的视图来自单个表。只是为了好玩(?)我将视图更改为 select 'VO205164' trx_ctrl_num, 'link 1' invoice_link,'' note union select 'VO205164' trx_ctrl_num, 'link 2' invoice_link,'' note union select 'VO205164' trx_ctrl_num, 'link 3' invoice_link,'' 备注。结果是一样的,从MVC生成并通过SQL Profiler捕获并在SQL Management Studio中运行的SQL返回了预期的结果,但是数据模型重复了第一个链接。请注意,这是查看一个旧的现有数据库
  • 仅供参考,我将视图更改为存储过程,这样可以正确获取数据并正确显示在视图表单上。我将尝试更新到 Visual Studio 2015,看看是否会有所改变

标签: linq visual-studio-2013 lambda sql-server-2008-r2 asp.net-mvc-5


【解决方案1】:

好的,所以这一切都取决于模型上的实体键。 我打开 *.edmx 图并右键单击此视图的三个字段中的每一个,并将它们设置为 Entity Key 勾选以创建唯一键。我认为在模型类中这样做会做到这一点;我的经验不足。 重新构建项目,现在运行正常。这个“实体键”不会以任何方式更改模型类,只是 edmx 文件(它出现)。但是,我猜是因为我拥有的密钥 (trx_ctrl_num) 在三个记录中不是唯一的,所以它变得“混乱”。 谢谢

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多