使用经典 ado.net 加载相关实体
本文关键字:实体 加载 net 经典 ado | 更新日期: 2023-09-27 18:34:34
环境: WPF + MVVM + 存储库模式 + 经典 ADO.NET + SQL
背景:为简单起见,我们只考虑数据库中的 2 个表,User 和 UserType。
表
<i>User</i> : Id, Username, TypeId(fk ref UserType.Id)
<i>UserType</i> : Id (pk), TypeName
模型
public class User {
public int Id {get;set;}
public string Username {get;set;}
public UserType Type {get;set;}
}
public class UserType {
public int Id {get;set;}
public string TypeName {get;set;}
}
问题:
使用经典 ado.net(不是 EF 或 LINQ(加载相关实体的最佳方法是什么?我是否必须在 SQL 进程中联接用户和用户类型表,然后在代码中填充每个相关实体?但这似乎很乏味,因为相关实体本身可能有几个相关实体.class例如 A -> B -> C -> D 等。
当我们使用 EF 时,在调试器中,我们实际上可以查看当前实体到任何级别的所有相关实体。经典 ado.net 可能吗?
即使在实体框架中,它也不会获取所有相关实体。 当您尝试访问实体时,它要么延迟加载实体,从而导致其他查询,要么您必须专门Include
要急切获取的实体的路径。
也许你应该为每个类添加一些逻辑,以便它知道如何获取自己的相关模型? 这样,模型 A 就不必了解模型 B、C 和 D。 它可能只需要了解模型B。 虽然模型B知道模型C等。
您只需要划分代码,以便每个实体知道如何获取与其直接相关的模型。
虽然我个人认为这是矫枉过正,但如果您只想从两个不同的表中获取数据,您可能应该使用 SQL JOIN
并使用 SqlDataReader
遍历结果。