【问题标题】:Is there an alternative to triggers?有没有替代触发器?
【发布时间】:2013-03-20 10:25:36
【问题描述】:

我正在考虑在实体框架中使用 Code First 方法。

我喜欢在 DateAdded 和 DateModified 等字段上向我的 SQL 数据库添加触发器,以便它们根据需要自动更新为 getdate()

据我所知,EF 很难做到这一点:Code First,那么是否有替代方案?

【问题讨论】:

  • 这不好玩。您需要覆盖 POCO 的 OnModelCreating 并将属性设置为 getdate
  • @DaveA 不,你可以设置DatabaseGenerated.Computed,但我认为OP指的是通过迁移创建触发器,你罗文吗?
  • @GertArnold,我想在OnModelCreating 方法中使用DatabaseGenerated.Computed。我认为这是触发器的替代品。了解触发器在代码优先中存在问题
  • 嗯,我的问题是,我不知道应该怎么做或者应该怎么做最好。所以我愿意接受任何建议。做到这一点的一种方法是使用代码优先迁移并在我去的时候简单地将触发器添加到 SQL 服务器?这意味着如果我将项目移动到另一台服务器并且代码首先生成数据库,那么我将不得不重新添加触发器。如果不使用触发器,我只是更改我的代码,以便在编辑该表时将 DateUpdated 更新为当前的 GETDATE() 怎么样?这会是最佳做法吗?

标签: entity-framework asp.net-mvc-4 code-first triggers


【解决方案1】:

它不一定很难(例如getdate() default),你只需要知道在哪里注入......

您可以将自定义 SQL 包含到“链”中 - 通过使用 Seed-ing 或自定义Initializer - 进行任何类型的自定义工作。

如果您想进行“后期创建”,您可能会遇到迁移问题 - 但如果您在 Db 仍然为空的情况下限制所有此类类似的初始化工作,您应该没问题。

另一个需要担心的是各种 Db 提供程序 - 因为任何自定义 SQL 可能会有所不同或支持 - 但如果你知道你的目标是什么,你应该没问题。

查看此链接 - Possible to default DateTime field to GETDATE() with Entity Framework Migrations?
或者这个一般是关于 Triggers https://stackoverflow.com/a/5913581/417747

...它可能接近您的需要 - 并让您了解如何做一些其他事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多