Свойства EF Navigation не вызывают события OnPropertyChanging и OnPropertyChanged - PullRequest
0 голосов
/ 25 апреля 2011

Свойства навигации EF не вызывают события OnPropertyChanging и OnPropertyChanged.

При просмотре автоматически сгенерированного кода платформы сущностей простое свойство будет иметь установщик, который выглядит следующим образом:

    Set
        OnNameChanging(value)
        ReportPropertyChanging("Name")
        _Name = StructuralObject.SetValidValue(value, false)
        ReportPropertyChanged("Name")
        OnNameChanged()
    End Set

Однако свойства навигации имеют такой установщик:

    Set
        If (Not value Is Nothing)
            CType(Me,EntityWithRelationships).RelationshipManager.InitializeRelatedCollection(Of DataType)("MyDatabase.FK_FKTable_PrimaryKeyTable", "FKTable", value)
        End If
    End Set

Похоже, что свойства навигации должны вызывать просто вызов 4 методов уведомления об изменении. Есть ли у вас какие-либо идеи о том, почему генератор EF будет реализован таким образом? Есть ли вариант где-нибудь включить уведомление или обходной путь? Кроме того, я предполагаю, что редактирование кода, сгенерированного дизайнером, является плохой практикой, верно?

Спасибо.

1 Ответ

2 голосов
/ 27 апреля 2011

События OnPropertyChanging и OnPropertyChanged необходимы для того, чтобы ObjectStateManager знал, что какое-то свойство объекта изменилось.
В случае свойств навигации это не требуется, поскольку RelationshipManager выполняет необходимые действия в методе InitializeRelatedCollection.
Это часть механизма EntityCollection и EntityReference .
Любые изменения файла * .Designer.cs будут отброшены после любого запуска генератора кода. Вы можете попробовать настроить шаблоны T4 , как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...