1

我有一个 Web API 项目,由一个 MSSQL 数据库支持,该数据库包含(几乎)每个表上的创建和修改字段。这些字段上有触发器,以便分别在插入和更新记录时更新两者。

现在,当我在成功请求后将数据序列化为 JSON 时,我确实想发送这些创建和修改的字段,以便发出请求的前端可以用它来做他们的事情。然而,我不想要的是当数据被反序列化(或者,回发)时可以修改这些字段。很简单,你会说,只需在字段上使用 [JsonIgnore] 属性;只把它放在片场而不是在得到。

现在,事情开始让我感到困惑。我项目中的所有模型都是从实体模型 (.edmx) 自动生成的。因此,我不能直接将任何东西编辑到模型本身中,但我必须在它们之上生成部分模型。我已经在其他 SO 线程中看到了解决方案,使用 [MetadataType] 属性,就像这里的这个。

但是我如何(有效地)将此应用于我的案例?我一直在四处寻找,但还没有找到一个关于如何在“更高”部分类中分离自动实现的属性的示例。即便如此,这也意味着我必须为我的所有模型创建部分类,这将非常麻烦。我无法想象以前没有人这样做过,所以不会有更优雅的方式来追求这一点吗?

一个类的例子是:

public partial class Person
{
    [DataMember]
    public Nullable<System.DateTime> Created { get; set; }
    [DataMember]
    public Nullable<System.DateTime> Modified { get; set; }
}
4

1 回答 1

1

最终,我从 Model-First 方法切换到 Code-First 方法,这样我就可以更好地控制我的模型。

不过,在搜索了很多之后,我来回答我自己的问题。这个问题的核心是我希望能够自动设置 Created 和 Modified 字段,并忽略前端的反序列化,同时仍然能够通过序列化将这些字段发送到前端。

解决方案在于覆盖类中的SaveChanges方法DbContext。这个 SO 线程中给出了一个很好的例子:Entity Framework 4.1 DbContext Override SaveChanges to Audit Property Change。因此,所有的礼貌都归功于 James Pogran,因为他在我脑海中激发了这个想法,并以这种方式解决了问题。

他所做的是检查DbEntity更改的方式。他根据条目是否正在添加或修改来设置 Created 和 Modified 字段,然后调用base.SaveChanges以继续正常操作。

于 2013-07-16T13:58:30.377 回答