У меня есть класс с множеством свойств, которые можно изменять извне. В конце настройки всех свойств я хотел обновить только измененные поля в базе данных, так что будет эффективным способом?
Например. Скажем, ниже мой класс
public class SomeClass {
private int field1;
private string field2;
private string field3;
private byte field4;
public int Field1 {
get { return field1; }
set { field1 = value; }
}
public string Field2 {
get { return field2; }
set { field2 = value; }
}
public byte Field4 {
get { return field4; }
set { field4 = value; }
}
public string Field3 {
get { return field3; }
set { field3 = value; }
}
public SomeClass() { }
public bool FillClassVariablesWithCurrentDatabaseValue() {
//Fill the class variables with current database values
}
public bool UpdateModifiedFields() {
//Only update the modified fields in database
}
}
Теперь, чтобы узнать, было ли обновлено поле или нет, мне нужно добавить столько логических переменных в класс, как показано ниже.
public class SomeClass {
private int field1;
private string field2;
private string field3;
private byte field4;
private bool field1Updated;
private bool field2Updated;
private bool field3Updated;
private bool field4Updated;
public int Field1 {
get { return field1; }
set {
if (field1 != value) {
field1 = value;
field1Updated = true;
}
}
}
public string Field2 {
get { return field2; }
set {
if (field2 != value) {
field2 = value;
field2Updated = true;
}
}
}
public byte Field4 {
get { return field4; }
set {
if (field4 != value) {
field4 = value;
field4Updated = true;
}
}
}
public string Field3 {
get { return field3; }
set {
if (field3 != value) {
field3 = value;
field3Updated = true;
}
}
}
public SomeClass() { }
public bool FillClassVariablesWithCurrentDatabaseValue() {
//Fill the class variables with current database values
}
public bool UpdateModifiedFields() {
//Only update the modified fields in database
string parameters = string.Empty;
if (field1Updated)
parameters += "field1=@field1";
if (field2Updated)
parameters += "field2=@field2";
if (field3Updated)
parameters += "field3=@field3";
if (field4Updated)
parameters += "field4=@field4";
//code to update these fields
}
}
Но поскольку в моем классе много переменных, я не думаю, что этот подход хорош. Любое предложение будет полезным.





Вы можете вести список свойств, которые изменились в
List<string> updatedProperties;
Для каждого свойства, которое изменяется в установщике, добавьте имя свойства в свой список. Наконец, в методе обновления прокрутите приведенный выше список, чтобы создать свою логику обновления.
Вышеупомянутое уменьшает количество переменных. Если вы хотите, чтобы ваш метод обновления был чистым, вы можете поддерживать сопоставление имен свойств со столбцами базы данных.
Обдумаю ваш ответ, но жду действительно крутой / классной техники :)
Я тоже думал об этом, но для этого мне придется написать случаи переключения для добавления значений параметров в SqlCommand, код обновления станет беспорядочным.