Похоже, вы хотите сделать это:
MyObj x = new MyObj();
x.SomeProperty = 10;
У вас есть таблица, созданная для этого, но вы не хотите продолжать изменять эту таблицу, когда добавляете
x.AnotherProperty = "Some String";
Вам необходимо нормализовать данные таблицы следующим образом:
-> BaseTable
RecordId, Col1, Col2, Col3
-> BaseTableProperty
PropertyId, Name
-> BaseTableValue
ValueId, RecordId, PropertyId, Value
Ваш класс будет выглядеть так:
public class MyObj
{
public int Id { get; set; }
public int SomeProperty { get; set; }
public string AnotherProperty { get; set; }
}
Когда вы создаете свой объект из вашего DL, вы перечисляете набор записей. Затем вы один раз пишете код, который проверяет свойство с тем же именем, что и ваша конфигурация (BaseTableProperty.Name
== MyObj.<PropertyName>
), а затем пытаетесь привести тип к этому типу при перечислении набора записей.
Затем вы просто добавляете другое свойство к вашему объекту, другую запись в базу данных в BaseTableProperty
, и затем вы можете хранить значения для этого парня в BaseTableValue
.
Пример: * * один тысяча двадцать-одна
RecordId
========
1
PropertyId Name
========== ====
1 SomeProperty
ValueId RecordId PropertyId Value
======= ======== ========== =====
1 1 1 100
У вас есть два набора результатов: один для базовых данных, а другой - из таблиц свойств и значений. Перечисляя каждую запись, вы видите Имя SomeProperty
- существует ли typeof(MyObj).GetProperty("SomeProperty")
? Да? Какой это тип данных? Int? Хорошо, тогда попробуйте преобразовать «100» в int
, установив свойство:
propertyInfo.SetValue(myNewObjInstance, Convert.ChangeType(dbValue, propertyInfo.PropertyType), null);
Для каждого свойства.