Ответ 1
Вы можете использовать ExpandoObject
:
Представляет объект, члены которого могут динамически добавляться и удаляться при время выполнения.
dynamic expando = new ExpandoObject();
expando.Cost= 42.0;
expando.ItemName = "Shoes";
В моем классе у меня есть частные переменные и свойства, подобные этому.
private string _itemCOde=string.Empty;
private string _itemName=string.Empty;
public string ItemCode
{
get { return _itemCode; }
set { _itemCode = value == null ? value : value.Trim();}
}
public string ItemName
{
get { return _itemName; }
set { _itemName = value == null ? value : value.Trim();}
}
В соответствии с этими свойствами я создаю объекты Item после выбора данных из таблицы sql.
Теперь, если таблица базы данных изменилась и добавит новый столбец с именем cost, тогда мне нужно добавить другое свойство в класс. Без добавления новых свойств в класс существует ли какой-либо способ динамически объявлять свойства в соответствии с полями таблицы.
Вы можете использовать ExpandoObject
:
Представляет объект, члены которого могут динамически добавляться и удаляться при время выполнения.
dynamic expando = new ExpandoObject();
expando.Cost= 42.0;
expando.ItemName = "Shoes";
Возможно, вам нужен словарь.
Если вам нужно сохранить атрибуты класса в синхронизации с схемой таблицы SQL... Что вам нужно, LINQ to SQL
Взгляните на DynamicObject. Вы можете обернуть System.Data.DataRow в один, чтобы получить функциональность, о которой я думаю, что вы после.
http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx
Если новые столбцы добавляются в базы данных, вам нужно изменить свой код, чтобы указать, как следует использовать новые столбцы.
Если вам нужно просто показать содержимое таблицы, несмотря на поле в таблице, вы можете использовать класс DataTable
.
Вы можете динамически связывать имена и значения друг с другом с помощью Dictionary<TKey,TValue>
. Вы можете комбинировать это с собственной оболочкой с помощью индексатора:
public string this[this key]
{
get { return dictionary[key]; }
set { dictionary[key] = value == null ? null : value.Trim(); }
}
Тем не менее, если база данных изменяется, то вам, вероятно, следует изменить свой объект, потому что он изменился.
Вот ссылка для динамического добавления свойства, строка espacial data из базы данных http://www.eggheadcafe.com/community/aspnet/2/10070284/how-to-dynamically-add-propery-in-a-class-in-c.aspx