如何使用 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 在视图中包含相关对象的主要内容,如果未能解决你的问题,请参考以下文章