Мы создали внутренний инструмент, который генерирует весь доступ к данным, каждая таблица имеет класс, представляющий его данные и все общие операции. (Подумайте об облегченной структуре Entity).Вопрос о интерфейсах C# и, возможно, generics
Эти объекты DataAccess всегда имеют конструктор, который получает строку подключения, и функцию загрузки, которая получает SqlDataReader.
Что-то вроде этого:
class Customer
{
public string ConnStr;
public int Id;
public string Name;
Public customers(string connStr)
{
ConnStr = connStr;
}
public Customer Load(SqlDataReader)
{
if(reader.Read())
{
Id = reader["Id"].ToString();
Name = reader["Name"].ToString();
}
}
}
Я хочу написать статический метод доступа утилита Data, которая позволит мне написать мой SQL и получить список объектов, в свою очередь, после этого предыдущего примера объекта:
Я как-то не могу понять, как с этим бороться, я пробовал интерфейсы, но они не позволяют конструкторам или статическим методам, и с помощью generics - я не могу вызвать методы, которые мне нужно для инициализации объекта (конструктор + загрузка), вот моя последняя попытка, прокомментировал секту п, что не работает:
public static List<T> GetList<T>(string connStr, string SQL, params SqlParameter[] prms)
{
List<T> list = new List<T>();
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand cmd = new SqlCommand(SQL, conn);
foreach (SqlParameter param in prms)
{
cmd.Parameters.Add(param);
}
using (SqlDataReader reader = cmd.ExecuteReader())
{
//T item = new T(connStr);
//item.Load(reader);
//list.Add(item);
}
}
return list;
}
Btw, мы заинтересованы в открытом поиске нашего генератора DATAACCESS, это удивительно - это позволяет очень юбилеям, доступ к объектам БД + создает яваскрипт слой доступа к данным что дает вам ПОЛНЫЙ КОНТРОЛЬ вашей БД из javascript (конечно, это имеет последствия для безопасности, которые можно управлять).
Если кто-нибудь здесь знает, как «с открытым исходным кодом» проекта, как это или любой компании, которая хочет присоединиться к разработке этого продукта - пожалуйста, не стесняйтесь связаться со мной: [email protected]
Спасибо продвижение, Эйтан
OT, но с точки зрения пуриста, эти доменные объекты знают ** много ** о постоянстве, что не обязательно является их ответственностью. Я также думаю, что DataContext мог бы сделать большую часть этой привязки для вас без какого-либо кода доступа к данным в сущности бесплатно ['ExecuteQuery'] (http://msdn.microsoft.com/en-us/library/ bb361109.aspx) –
Лассе поднимает интересный момент о том, кто называет Read; во многих отношениях было бы предпочтительнее принимать «IDataRecord», а не «IDataReader' /' SqlDataReader »- при условии, что им нужна только одна строка. –