#c# #asp.net
#c# #asp.net
Вопрос:
Хорошая ли методология кодирования для создания класса в цикле? То есть я вызываю свою базу данных для извлечения всех контактов, во время этого цикла я создаю класс contacts на основе идентификатора контакта (который снова вызывает DB для получения контактных данных на основе id). Это умное кодирование или расточительные ресурсы?
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read()) {
Contact contact = new Contact(Convert.ToInt32(reader["contactid"]));
userString = userString contact.getSurname();
}
public Contact(int id) {
MySqlConnection connection = new MySqlConnection(Global.conn);
connection.Open();
MySqlCommand command = connection.CreateCommand();
string sql = "SELECT *
FROM contact
WHERE contactid=@contactid";
command.CommandText = sql;
command.Parameters.AddWithValue("@contactid", id);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read()) {
FirstName = reader["name"].ToString();
Surname = reader["Surname"].ToString();
}
}
Комментарии:
1. В этом нет ничего изначально неправильного. Почему вы открываете новое соединение и перечитываете контакт?
2. Немного информации об именовании: вы не создаете класс в цикле; вы создаете объект в цикле, который является экземпляром класса. Вы должны получить все данные, необходимые для
Contact
объекта, во время чтения и передать их своему экземпляру через конструктор или через инициализатор объекта .3. Мне кажется немного странным. Я бы создал один запрос, который выбирает всю контактную информацию вместо подхода вложенного чтения.
4. Спасибо. Проблемы, с которыми я сталкиваюсь, заключаются в том, что у меня повсюду есть таблицы сопоставления. Таким образом, у контакта может быть несколько контактных телефонов. Это означает, что с точки зрения БД существует таблица mapping_contact_phone, которая имеет отношение 1 ко многим с телефонной таблицей. Таким образом, один запрос не работает для меня, поскольку я получаю несколько строк. Думал получить идентификатор контакта, вызвать конструктор, а затем запустить несколько отдельных операций чтения данных для создания переменных класса. Просто беспокоюсь о производительности в результате.
5. Если бы вы могли использовать ORM, такой как entity framework (или микро-ORM, такой как Dapper), это сделало бы вашу жизнь намного проще.