Конечно, вы не можете переопределить свой AddressID для того, чтобы поместить свою пользовательскую логику в установщик, так как вы получите ошибку компилятора:
Тип Address уже содержит определение для 'AddressID'
Но не беспокойтесь, если вы посмотрите на сгенерированный EF-код для вашего EntityObject (давайте предположим, что его имя - Address), вы увидите, что каждое скалярное свойство сгенерированного класса Address имеет свою собственную версию OnPropertyChanging и OnPropertyChanged метод. Например, OnAddressIDChanging и OnAddressIDChanged в этом случае.
Как вы можете видеть ниже, для этих двух методов нет реализации по умолчанию, только декларация. Это прекрасно дает вам возможность выполнить пользовательскую логику
так как свойство собирается изменить (PropertyChanging), а также сразу после свойства
значение изменилось (PropertyChanged).
// From the designer code for Address class:
partial void OnAddressIDChanging(global::System.Int32 value);
partial void OnAddressIDChanged();
Вот как выглядит ваш код конструктора Entity Model (гипотетически):
public global::System.Int32 AddressID {
get {
return _AddressID;
}
set {
if (_AddressID != value) {
// OnPropertyChanging method get called here:
OnAddressIDChanging(value);
ReportPropertyChanging("AddressID");
_AddressID = StructuralObject.SetValidValue(value);
ReportPropertyChanged("AddressID");
// OnPropertyChanged get called here:
OnAddressIDChanged();
}
}
}
Итак, все, что вам нужно сделать, чтобы подключить свой код:
public partial class Address {
partial void OnAddressIDChanged() {
if(AddressID == -1) {
AddressID = 0;
}
}
}
Кстати, о других опубликованных ответах - при всем их уважении - если вы хотите использовать это решение для производственного приложения, то вы не можете использовать «Code First», поскольку это просто CTP на данный момент и будет частью следующего выпуска для EF, так что это не может быть вариантом.
О настройке генерации кода по умолчанию, хотя это действительно возможно, поскольку в VS 2010 сама Entity Framework также использует T4 для генерации кода дизайнера, и мы можем воспользоваться этим, изменив T4, но это вариант, только если вы хотите фундаментально изменить как классы сущностей генерируются в целом, и вы не можете использовать их для настройки логики установки для конкретной сущности.