Да, вы можете изменить это. Однако в текущей версии Entity Framework это не тривиально. В будущем станет легче.
Причина, по которой вы видите это поведение, заключается в генерации кода по умолчанию для модели сущностей. Вот типичный пример:
public global::System.Guid Id
{
get
{
return this._Id;
}
set
{
// always!
this.OnIdChanging(value);
this.ReportPropertyChanging("Id");
this._Id = global::System.Data.Objects.DataClasses
.StructuralObject.SetValidValue(value);
this.ReportPropertyChanged("Id");
this.OnIdChanged();
}
}
private global::System.Guid _Id;
partial void OnIdChanging(global::System.Guid value);
partial void OnIdChanged();
Эта генерация кода по умолчанию является разумной, потому что Entity Framework не знает семантики того, как вы собираетесь использовать значения. Типы в свойстве могут или не могут быть сопоставимы, и даже если они есть, каркас не может знать, как вы собираетесь использовать ссылочное равенство и равенство значений во всех случаях. Для определенных типов значений, таких как десятичное, это довольно ясно, но в общем смысле это не очевидно.
Вы, с другой стороны, знаете свой код и можете его настроить. Проблема в том, что это сгенерированный код, поэтому вы не можете просто войти и отредактировать его. Вам нужно либо взять на себя генерацию кода, либо сделать его ненужным. Итак, давайте посмотрим на три варианта.
Взять на себя генерацию кода
Существенным подходом здесь является создание шаблона T4, который выполняет код и который является генерацией кода по умолчанию из Entity Framework. Вот один пример. Одним из преимуществ этого подхода является то, что Entity Framework перейдет к генерации T4 в следующей версии , поэтому ваш шаблон, вероятно, будет хорошо работать в будущих версиях.
Устранить генерацию кода
Второй подход заключается в том, чтобы полностью исключить когенерацию, а сделать вашу поддержку отслеживания изменений вручную, через IPOCO . Вместо того чтобы изменять способ генерации кода, при таком подходе вы вообще не производите генерацию кода, а вместо этого предоставляете поддержку отслеживания изменений в Entity Framework путем реализации нескольких интерфейсов. См. Связанный пост для более подробной информации.
Подождите
Другой вариант - жить с Entity Framework, как он есть на данный момент, и ждать следующего релиза, чтобы получить желаемое поведение. В следующей версии Entity Framework по умолчанию будет использоваться T4 , поэтому настройка генерации кода будет очень простой.