如何使用 ADO.net 在视图中包含相关对象

Posted

技术标签:

【中文标题】如何使用 ADO.net 在视图中包含相关对象【英文标题】:How to Include related objects in view using ADO.net 【发布时间】:2021-07-04 03:27:48 【问题描述】:

我正在使用 C# 和 ASP.NET MVC。通常我也使用实体框架,但最近我一直在使用 ADO.net 和 SQL。我的 ADO.NET 代码有问题:在 Entity Framework/LINQ 中解决问题我会使用 Include 关键字将相关数据包含到视图中,所以我没有得到对象不引用错误所以问题是如何使用 ADO.NET 来做到这一点的 什么相当于 ADO.NET 和 SQL 中的 LINQ Include 关键字?

Include关键字的代码示例:

private Comment GetComment(int? id)       

     return id.HasValue ? Db.Comments.Where(x=> x.ID == id)
                                     .Include(y => y.Replies)
                                     .First() : new Comment  ID = -1 ;

正如您从评论中看到的那样,我还从另一个相关的表中加载回复。

如何在 ADO.Net 和 SQL 中执行此操作?

【问题讨论】:

你需要JOIN你的SQL语句中的两个表.... 我加入了,问题是如何正确地将加入的数据传递给模型,例如我有 cmets 并且 cmets 在其模型中有一个回复列表,视图类型为 cmets 我如何通过对评论模型的回复??仔细考虑一下,在评论模型中,我将有一个回复对象列表,当数据来自阅读器并且我循环遍历它时,我可以轻松填充评论但无法填充回复,因为我无法通过回复数据到回复类型的对象只有我可以将数据传递到的普通字段。 您需要一个组合的“视图模型”,可以容纳从连接查询返回的所有数据 您基本上是在执行原始 SQL 查询,因此您必须创建所有对象。这就是 ORM 存在的原因。为什么使用 ADO.Net? 【参考方案1】:

我认为问题在于我对包含意味着实体的经验。

所以在你的情况下:

Db.Comments.Where(x => x.ID == id)
           .Include("Replies")
           .First() : new Comment  ID = -1 ;

IN你的数据模型应该是关系:

public class Comments

    private readonly ObservableListSource<Replies> _replies =
                       new ObservableListSource<Replies>();
    
    public int ID  get; set; 
    // (other attributes)
    
    public virtual ObservableListSource<Replies> Replies
     get  return replies;  

【讨论】:

以上是关于如何使用 ADO.net 在视图中包含相关对象的主要内容,如果未能解决你的问题,请参考以下文章

ADO.net 如何将数据库单元格变成整数?

ADO.NET中主要对象

ADO.NET 包含哪些内容

如何在 ADO.NET 中安全地创建从更改中选择的表的查询?

CQRS读端ORM还是纯ADO.NET?

参数缓存如何提高 ADO.NET 中的性能?