我首先使用 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;
}
}
但是,现在每次我更新模型时,自动属性都会在 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;
}
}
我还将自动生成的属性的所有 setter 和 getter 设置为 Private,但我需要在 Linq-to-Entities 查询中使用的那些属性除外(叹气)。在这些情况下,我将这些吸气剂设置为内部。
我当然希望在 DateTime 类型上有一个下拉菜单,以指定 EF 应将其视为什么“种类”的 DateTime。这将节省时间和额外的复杂性。