Загрузить связанные объекты с помощью классического 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)? Нужно ли мне объединять таблицы User и UserType в SQL proc, а затем в коде заполнять каждую связанную сущность? Но это кажется утомительным, поскольку сам связанный объект может иметь несколько связанных объектов, например, класс A -> B -> C -> D и т. Д.

Когда мы используем EF, в отладчике мы можем фактически просматривать все связанные объекты текущего объекта на любом из уровней. Это возможно с классическим ado.net?

1 ответ

Даже в Entity Framework он не выбирает все связанные объекты. Либо он лениво загружает объекты, когда вы пытаетесь получить к ним доступ, что приводит к дополнительным запросам, либо вам нужно специально Include пути для сущностей, которые вы хотите получить с нетерпением.

Может быть, вы должны добавить некоторую логику для каждого класса, чтобы он знал, как выбрать свои собственные связанные модели? Таким образом, модель A не должна знать о моделях B, C и D. Она может знать только о модели B. В то время как модель B знает о модели C и т. Д.

Вам просто нужно разделить ваш код так, чтобы каждый объект знал, как выбрать модели, которые непосредственно связаны с ним.

Хотя лично я считаю, что это излишне, но если вы хотите получать данные только из двух разных таблиц, вам, вероятно, следует просто использовать SQL JOIN и перебрать результаты с SqlDataReader,

Другие вопросы по тегам