В настоящее время я разрабатываю приложение, объектная модель и уровень персистентности которого создаются с помощью конструктора моделей Entity Framework.
Одно из требований, которое у меня есть, - это предоставление статуса моим сущностям, который может сообщать мне всякий раз, когдаони находятся в «грязном» состоянии (измененном), когда происходит изменение статуса и, что наиболее важно, работают в отключенном режиме.Поэтому я начал изменять шаблон T4 для добавления логического свойства IsDirty
при генерации этих сущностей, добавил событие, которое вызывается при каждом изменении IsDirty
, и добавил this.IsDirty = true
в методы xxxChanged всех скалярных свойств.
Все прекрасно работает, когда сущность не присоединена к своему контексту, но когда присоединена, когда свойство изменяется, изменяя значение IsDirty
на false
, я получаю это исключение:
Свойство IsDirty не имеет действительного сопоставления сущностей для объекта сущности.Для получения дополнительной информации см. Документацию Entity Framework.
Так что же я здесь не так делаю?Я не хочу, чтобы это свойство отображалось в моей базе данных, так как это просто состояние объекта, которое имеет значение только тогда, когда объект «жив».Есть ли атрибут, который я должен использовать для украшения свойства IsDirty
?Или я должен получить EntityObject и реализовать механизм статуса?Или, может быть, у вас есть лучший совет, как это реализовать?
Спасибо.
Редактировать: я использую Entity Framework 4.0 с конструктором EDM.
Вотфрагмент кода, сгенерированный в каждой базовой сущности:
private bool isDirty;
public event EventHandler DirtyStatusChanged;
public bool IsDirty
{
get
{
return this.isDirty;
}
internal set
{
if (this.isDirty != value)
{
ReportPropertyChanging("IsDirty");
this.isDirty = value;
ReportPropertyChanged("IsDirty");
ReportDirtyStatusChanged();
}
}
}
protected void ReportDirtyStatusChanged()
{
var handler = this.DirtyStatusChanged;
if(handler != null)
{
handler(this, EventArgs.Empty);
}
}