Я сначала использую базу данных EF 4 + POCO. Поскольку в EF нет простого способа указать, что входящие DateTimes относятся к типу UTC, я переместил свойство из автоматически сгенерированного файла в частичный класс в другом файле.
private DateTime _createdOn;
public virtual System.DateTime CreatedOn
{
get { return _createdOn; }
set
{
_createdOn =
(value.Kind == DateTimeKind.Unspecified)
? _createdOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
: value;
}
}
Однако теперь каждый раз, когда я обновляю модель, автоматические свойства будут созданы снова в поколении Т4. Конечно, это вызывает следующую ошибку компиляции: «Тип 'Foo' уже содержит определение для 'CreatedOn'».
Есть ли способ запретить EF создавать это свойство и позволить мне обрабатывать его самостоятельно?
Обновление
Спасибо за все ответы ...
Я создал новое настраиваемое свойство с другим именем.
public virtual System.DateTime CreatedOnUtc
{
get
{
return (CreatedOn.Kind==DateTimeKind.Unspecified)
? DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc)
: CreatedOn;
}
set
{
CreatedOn =
(value.Kind == DateTimeKind.Unspecified)
? CreatedOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
: value;
}
}
Я также установил все сеттеры и получатели автоматически сгенерированного свойства на Private с исключение из тех свойств, которые мне нужно было использовать в запросе Linq-to-Entities (вздох). В этих случаях я устанавливаю эти геттеры как внутренние.
Я бы очень хотел, чтобы в типах DateTime было раскрывающееся меню, чтобы указать, какой «Kind» DateTime должен рассматривать EF. Это сэкономило бы часы и сэкономило бы дополнительные сложности.