环境: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 proc中加入User和UserType表,然后在代码中填充每个相关实体?但这似乎很乏味,因为相关实体本身可能有几个相关实体,例如A类 - &gt; B - &gt; C - &gt; D等。
当我们使用EF时,在调试器中我们实际上可以查看当前的所有相关实体到任何级别。这可能与经典的ado.net有关吗?
答案 0 :(得分:0)
即使在Entity Framework中,它也不会获取所有相关实体。当您尝试访问实体并导致其他查询时,它会延迟加载实体,或者您必须专门Include
您希望获取的实体的路径。
也许你应该为每个类添加一些逻辑,以便它知道如何获取自己的相关模型?这样,模型A不必知道模型B,C和D.它可能只需要知道模型B.而模型B知道模型C等。
您只需要对代码进行划分,以便每个实体都知道如何获取与其直接相关的模型。
虽然我个人认为这有点过分,但如果您只想从两个不同的表中获取数据,您应该只使用SQL JOIN
并使用SqlDataReader
循环结果。