Я почти уверен, что вы не можете создавать новые скалярные типы даже в EF4.0.
То, что вы на самом деле можете сделать, - это создать сложный тип, охватывающий скалярный тип.Сложные типы поддерживаются конструктором в VS2010.
<ComplexType Name="DateTimeWrapper" >
<Property Type="DateTime" Name="Value" Nullable="false" />
</ComplexType>
Укажите любое значение по умолчанию и несколько операторов неявного преобразования.
public class DateTimeWrapper
{
private DateTime _value = DateTime.Now;
public DateTime Value
{
get { return _value; }
set { _value = value; }
}
public static implicit operator DateTime(DateTimeWrapper wrapper)
{
if (wrapper == null) return DateTime.Now;
return wrapper.Value;
}
public static implicit operator DateTimeWrapper(DateTime date)
{
return new DateTimeWrapper { Value = date };
}
}
Таким образом, у каждого объекта, имеющего комплексное свойство DateTimeWrapper
тип будет правильно инициализирован.И вы можете использовать следующий синтаксис: MyEntity.MyDateTimeWrapperProp = DateTime.UtcNow
при создании и изменении объектов.
Но в запросах вам придется написать MyEntities.Where(ent => ent.MyDateTimeWrapperProp.Value == ...)
.