Я использую сначала базу данных EF 4 + POCOs. Поскольку 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;
}
}
Однако теперь, каждый раз, когда я обновляю модель, автоматические свойства снова создаются в гене T4. Конечно, это приводит к следующей ошибке компиляции: "Тип" 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 (sigh). В этих случаях я устанавливал эти геттеры на внутренние.
Я уверен, что было показано выпадающее меню в типах DateTime, чтобы указать, какой "вид" DateTime должен рассматривать EF как EF. Это спасло бы часы и дополнительное усложнение.