Все наши приложения в настоящее время загружают XML-файл, расположенный в сети, используя Datamembers / Datacontacts с DataContactSerializer. Я думаю, что было бы безопаснее и проще для нас использовать таблицу SQL, даже если бы я потерял безопасность типов.
Я пытаюсь найти способ воспроизвести мои классы внутри таблицы SQL, чтобы, когда я хочу получить значение параметра, мне нужно было только выполнить MyConfig.Property, но я не могу найти решение, отличное от
- Реализация Get / Set для каждого свойства / поля
- Элемент списка
B) Используйте приведенный ниже код, но каждый раз, когда я хочу получить свойство, мне нужно будет сделать следующее: MyConfig [nameof (Property)].
Старый код VB.NET
<!-- language: vb -->
Public Sub CreateConfig()
ConfigApplications = New ConfigurationApplications
ConfigRBTK = New ConfigurationRBTK2
ConfigRBRE = New ConfigurationRBRE2
ConfigTC = New ConfigurationTC2
ConfigTLS = New ConfigurationTLS2
ConfigTQ = New ConfigurationTQ2
ConfigSoustrait = New ConfigurationSoutrait
Dim ser As New DataContractSerializer(GetType(AppConfig4))
Dim Settings As New XmlWriterSettings
Settings.Indent = True
Dim W As XmlWriter = XmlWriter.Create(ConfigFile, Settings)
ser.WriteObject(W, Me)
W.Close()
End Sub
Новый код C #
public object this[string propertyName]
{
get
{
string fullName = typeof(MyConfig).GetField(propertyName).DeclaringType.FullName + "." + propertyName;
using (Info_IndusContext conn = new Info_IndusContext())
{
return conn.AppConfig.Where(x => x.Param == fullName).FirstOrDefault().Value;
}
}
set
{
string fullName = typeof(MyConfig).GetField(propertyName).DeclaringType.FullName + "." + propertyName;
using (Info_IndusContext conn = new Info_IndusContext())
{
conn.AppConfig.Where(x => x.Param == fullName).FirstOrDefault().Value = value.ToString();
conn.SaveChanges();
}
}
}
Предварительный просмотр таблицы SQL
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Value</th>
</tr>
<tr>
<td>1</td>
<td>MyConfig.DefaultColor</td>
<td>Red</td>
</tr>
<tr>
<td>2</td>
<td>MyConfig.SiteA.Color</td>
<td>Blue</td>
</tr>
</table>