Итак, я работаю над базовым парсером данных MySql для одной из моих моделей и просто смотрю, чтобы сгенерировать для этого общий метод Get вместо того, чтобы сопоставлять каждую таблицу базы данных с моделью.
То, как я хочу это сделать, возможно, но я не знаю как.Я покажу вам некоторый код.
public class DatabaseHandler
{
public DatabaseHandler()
{
}
public DataSet Get<T>(string field = "id", string oper = ">", string input = "0") where T : BaseDataModel
{
DataSet ds = null;
using (var conn = Connection())
{
string query = string.Format("SELECT * FROM {0} WHERE {1} {2} {3}", typeof(T).Name.ToLower(), field, oper, input);
using (MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn))
{
ds = new DataSet();
adapter.Fill(ds);
}
}
return ds;
}
private MySqlConnection Connection()
{
return new MySqlConnection("server=localhost;database=trainingsschema;uid=trainingsschema;pwd=password;");
}
}
Тогда моя модель у меня в настоящее время:
public class Onderdeel : BaseDataModel
{
public Onderdeel() : base() { }
public virtual string Naam { get; set; }
}
База:
public class BaseDataModel
{
public BaseDataModel()
{
}
public virtual int Id { get; set; }
}
Так что, если я хочу проанализироватьрезультат этого набора данных в List<Onderdeel>
Я должен был бы отобразить каждую таблицу, существующую вне этого DatabaseHandler.Get<T>()
метода.Что бы я сделал, используя этот код:
myDataSet.Tables[0].AsEnumerable()
.Select(i => new ClassName() {
i.MyProperty = dataRow.Field<String>("MyDatabaseFieldName")
}.ToList();
То, что я хочу заархивировать, - это простой картограф, в котором имена полей базы данных находятся в метаданных свойства.
Итак, моя модель станет примерно такой:
[FieldName("identifier")]
public virtual int Id { get; set; }
[FieldName("naam")]
public virtual string Name { get; set; }
И тогда я бы хотел заменить
i.MyProperty = dataRow.Field<String>("MyDatabaseFieldName")
на цикл, который будет проходить через все свойствамоей модели и сопоставить их с «FieldName», которое я прикрепил к нему, также DataType не будет проблемой, потому что он там есть.Наконец, DatabaseHandler.Get<T>()
может затем вернуть List<T>
вместо DataSet
.
Кто может мне помочь?