Sql 如何在实际项目中使用数据库触发器?
在上一篇文章中,我学到了很多关于触发器和活动数据库的知识,但我对这些真实世界的例子有一些疑问 在工作中,我们将实体框架与ASP.Net和MSSQL服务器结合使用。我们只使用自动生成的约束,不使用触发器 当我听说触发器时,我问自己以下问题:Sql 如何在实际项目中使用数据库触发器?,sql,entity-framework,triggers,Sql,Entity Framework,Triggers,在上一篇文章中,我学到了很多关于触发器和活动数据库的知识,但我对这些真实世界的例子有一些疑问 在工作中,我们将实体框架与ASP.Net和MSSQL服务器结合使用。我们只使用自动生成的约束,不使用触发器 当我听说触发器时,我问自己以下问题: 触发器可以执行哪些任务? e、 g:报告数据的生成:目前报告的数据是在vb中创建的,但我认为触发器也可以处理这个问题。vb中的创建需要很多时间,用户不需要等待,因为这不是他的工作所必需的。 这是一个完美的触发器任务的例子吗 或映射器如何处理触发器操纵的数据?
提前感谢我使用触发器有两个主要目的:审核和更新修改/插入时间。审核时,触发器将数据推送到相关的审核表。这不会以任何方式影响ORM,因为这些表通常不会映射到主数据上下文中(当需要查看审计数据时,会使用单独的审计数据上下文) 在记录/修改插入/修改时间时,我通常将模型中的那些属性标记为
[DatabaseGenerated(DatabaseGenerationOptions.Computed)]
这可以防止在数据层中设置的任何值被保留回DB,并允许触发器正确地强制设置日期时间字段
我用这种方式管理审计和这些日期并不是一条硬性规定。有时,我需要比数据库本身更多的审计信息,而在数据层处理审计。有时我想强制应用程序更新日期/时间(因为在同一时间更新的多个行/表上,它们可能需要相同)。在这些情况下,我可能会使字段为空,但模型中的
[必需]
会强制在模型可以持久化之前设置日期/时间。旧的Infomodeler/Visiomodeler ORM(不是您认为的-它是对象角色建模)在生成物理模型时提供了一种替代方法。它将通过触发器提供所有引用完整性。原因有二:
触发器的一个概念性问题是,它们本质上是上下文无关的——它们总是在不考虑上下文的情况下触发(至少没有太大的麻烦,您最好将它们的逻辑与上下文特定逻辑的其余部分包括在一起)因此,全局域约束是我发现它们唯一有用的地方——我想这是识别“引用完整性”的另一种通用方法。当你听说一个新工具或设备时,并不意味着你必须到处使用它。您应该考虑应用程序的设计 当逻辑在数据库中时,触发器被大量使用,但是如果您在数据库的顶部构建ORM层,那么您希望使用ORM在业务层中使用逻辑。这并不意味着你不应该使用触发器。这意味着您应该以与存储过程或数据库函数相同的方式将它们与ORM一起使用——只有在有意义或提高性能时才使用。若你们将大量的逻辑传递给数据库,你们可以扔掉ORM,也许整个业务层,使用两层架构,UI将直接与数据库对话,数据库将完成你们需要的一切——这种架构被认为是“旧的”
StoreGeneratedPattern.Identity
或StoreGeneratedPattern.Computed
-EF完全遵循数据库或应用程序中的逻辑模式。一旦定义了在数据库中分配的值,就不能在应用程序中更改它(它不会持久化)触发器用于维护数据的完整性和一致性(通过使用约束),帮助数据库设计者确保某些操作已完成,并创建数据库更改日志 例如,给定数值输入,如果希望将值限制为小于100,则可以编写一个触发器,在更新或插入时为每一行触发,如果