2013-10-09 1 views
0

Окружающая среда: WPF + MVVM + шаблон хранилища + классический ADO.NET + SQL
Фон: для простоты рассмотрим только 2 таблицы в базе данных, User и UserType.объекты, связанные с нагрузкой, с использованием классического ado.net

Столы

<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?

ответ

0

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

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

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

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

+0

Я согласен, если вы хотите получить информацию о пользователе UserType через SQL proc, а затем заполнить основной User и связанный с ним объект UserType. – niksofteng

Смежные вопросы