EDIT:Loading Значение ключа пары на C# класс
Хранимая процедура возвращает следующие данные:
| Name | Value |
|---------|-----------|
| Member1 | someValue |
| Member2 | someValue |
И у меня есть класс, который со свойствами, которые имеют пользовательский атрибут, который соответствует " Название»поле в базе данных
class example{
[CustomMapping(DBName="Member1",...)]
public string MyName1{get; set;}
[CustomMapping(DBName="Member2",...)]
public int MyName2{get; set;}
}
И у меня есть следующий метод, чтобы заполнить класс из БД:
public void LoadFromDataReader(IDataReader reader)
{
Type type = this.GetType();
PropertyInfo[] props = type.GetProperties();
foreach (PropertyInfo property in props)
{
CustomMappingAttribute mappingAttribute = (CustomMappingAttribute)Attribute.GetCustomAttribute(property, typeof(CustomMappingAttribute));
object val = null;
if (property.GetType() == typeof(string))
{
val = CustomObjectData.SafeRead<string>(mappingAttribute.DBName, reader, string.Empty);
}
else
{
val = CustomObjectData.SafeRead<int>(mappingAttribute.DBName, reader, int.MinValue);
}
property.SetValue(property, val);
}
}
Я хочу присвоить каждому свойству соответствующее значение из БД. Приведенный выше код не будет делать это точно, поскольку он будет перезаписывать какое-либо свойство каждый раз, когда вызывается LoadFromDataReader()
из-за цикла for.
Как мне это сделать?
FYI: CustomObjectData.SafeRead читает FIELDNAME из БД и присваивает его свойству.
SafeRead<T>(string fieldName, IDataReader reader, T defaultValue);
.
.
.
.
.
Старый Вопрос:
Я хочу создать класс, который заполняется из базы данных. Члены класса, а также их значения должны считываться из базы данных.
Хранимая процедура возвращает следующие данные:
| Name | Value |
|---------|-----------|
| Member1 | someValue |
| Member2 | someValue |
Теперь я хочу, чтобы мой класс, чтобы иметь следующую структуру чтения/загруженное из хранимой процедуры:
class example{
public string Member1{get; set;}
public string Member2{get; set;}
}
Там всегда будет строка и хранимая процедура может вернуть любое количество пар ключ/значение.
Возможно ли это? Есть ли лучший способ сделать это?
Я хочу сделать это, потому что я буду сериализовать этот класс в JSON. И это становится тривиальным, если я правильно структурировал класс.
Да, это определенно возможно несколькими способами. Сколько вы читали о доступе к базе данных в .NET? Вы уже используете LINQ? –
Вы можете использовать [ExpandoObject] (http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject (v = vs.100) .aspx), но я бы не рекомендовал это делать , Почему бы вам не использовать простой «Список»? Он может быть легко (де-) сериализован. –
dymanoid
@stackErr LINQ относится ко всему ;-) – Murven