使用经典的ado.net加载相关实体

时间:2013-10-09 20:37:10

标签: c# sql ado.net

环境: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有关吗?

1 个答案:

答案 0 :(得分:0)

即使在Entity Framework中,它也不会获取所有相关实体。当您尝试访问实体并导致其他查询时,它会延迟加载实体,或者您必须专门Include您希望获取的实体的路径。

也许你应该为每个类添加一些逻辑,以便它知道如何获取自己的相关模型?这样,模型A不必知道模型B,C和D.它可能只需要知道模型B.而模型B知道模型C等。

您只需要对代码进行划分,以便每个实体都知道如何获取与其直接相关的模型。

虽然我个人认为这有点过分,但如果您只想从两个不同的表中获取数据,您应该只使用SQL JOIN并使用SqlDataReader循环结果。