EF 4.1代码优先向表添加触发器

Dmi*_*tri 17 entity-framework-4.1

将触发器添加到使用EF 4.1的代码优先方法创建的表的最佳方法是什么?

我正在考虑的一种方法是在OnModelCreating中或在初始化Db上下文时执行自定义SQL查询.

有更好的主意吗?

Lad*_*nka 19

CREATE TRIGGER如果您希望EF为您创建触发器(类似此处的类似代码),则使用将执行SQL命令的自定义初始化程序是唯一的选项.另外不要忘记SET NOCOUNT ON在触发代码的开头包含.

但是存在与触发器逻辑相关的更复杂的问题.如果您想要修改传递给数据库的数据的触发器,您必须了解触发器所做的更改不会反映在您当前的上下文中.Context仍然只知道您传递给数据库的数据的实体.这通常通过设置触发器修改的属性来解决,如DatabaseGeneratedOption.Computed更新或DatabaseGeneratedOption.Identity插入.在这种情况下,您无法修改应用程序中的属性,必须在数据库中修改它们.EF将确保在修改后选择这些属性并将其传递给实体.问题是这不适用于代码优先.


All*_*enG 1

我不完全确定你的意思。如果您想要在表上有一个实际的 SQL 触发器,那么我会像平常一样在 SQL 中创建触发器。如果您的意思是您希望在修改其中一个实体集时在代码中进行某种处理/更新,那么我认为您需要执行一种自定义方法,每当该实体集更新时都会调用该方法。

  • 我确实需要在桌子上放置一个实际的触发器。如果我直接在 SQL 中创建它,它将因为这个“DropCreateDatabaseIfModelChanges”而丢失。 (2认同)
  • 这根本没有任何意义...为什么不利用 SQL 而不是从代码中对数据库进行二次调用?编写和执行的代码也更少,它使 SQL 执行它应该执行的操作,即触发器。更不用说,这还减少了对数据库的调用。 (2认同)