2012-06-20 8 views
1

Я использую C# 2010 Entity Framework код первого Если у меня есть класс, как этотИспользование OnPropertyChanged с Entity Framework кода первого

partial class test  
{ 
     public double value1; 
     public double value2; 
     public double value3; 
     public double totals; 
} 

Это генерируется код

, как я мог бы создать частичный класс известково Итого

partial class test  
{ 
     public double totals { get { return value1 + value2 + value3; } } 

1 - Вы знаете, что изменить сгенерированный класс нецелесообразно. 2 - нет возможности частично определить итоговые значения свойств. 3 - И использование класса метаданных не обновляет итоговые значения до сохранения изменений.

Я признателен, если кто может определить, каким образом можно реализовать OnPropertyChanged и использовать для решения этой задачи

Благодарности

ответ

0

Ваше имущество во втором классе отсутствует «получить» ключевое слово:

partial class test  
{ 
     public double totals { 
      get { return value1 + value2 + value3; } 
     } 
} 

В качестве альтернативы вы можете определить метод Total().

Насколько я могу судить по вашему вопросу («как я могу создать частичный класс для вычисления итогов»), вам не нужно использовать OnPropertyChanged, потому что свойство/метод totals будет каждый раз запускать вычисление с помощью нового значения в итоговых значениях. Вы можете удалить это поле из исходного класса, так как оно является калькулятором и действительно не должно храниться.

Если вы действительно должны обновить общее значение в базе данных, вы можете использовать частичные методы OnPropertyChanged, как вы предложили. Вы должны будете использовать свойство, чтобы вызвать новый метод:

partial class test 
{ 
    public double Value1 
    { 
     get { return value1; } 
     set 
     { 
      value1 = value; 
      Onvalue1Changed(value); 
     } 
    } 

    partial void Onvalue1Changed(double value) 
    { 
     UpdateTotals(); 
    } 

    private void UpdateTotals() 
    { 
     totals = value1 + value2 + value3; 
    } 
} 

Вы должны сделать оригинальные поля приватными и только обеспечиваете доступ общественности через свойство. Это не только лучший дизайн кода, но и позволяет реализовать желаемую функциональность.

Есть, конечно, другие образцы, за которыми вы можете следовать, но это должно вас начать.

+0

Мне нужно, чтобы Totals обновлялись, если значение value1 или value2 или value3 изменены. также я не могу удалить итоговые значения из исходного класса, пока он автогенерируется с помощью ef, и он существует в базе данных – Sam1970

+0

Грязная конструкция базы данных ... хорошо, в этом случае вы можете просто определить частичные методы OnPropertyChanged в вашем частичном классе (например, Onvalue1Changed (двойное значение)). Это объясняется здесь: http://msdn.microsoft.com/en-us/library/cc716747.aspx – kad81

+0

Сначала я использую код. не могли бы вы привести пример, как я могу добавить Onpropertychanged в мой неполный класс. пример, который вы прикрепляете для EntityObject – Sam1970