我首先使用Entity Framework6代码,并想创建一个触发器。
我该怎么做呢?
我需要触发器的原因是因为用户可以直接编辑数据库,也可以通过我编写的程序编辑数据库,并且我需要确保表中的两列不都是null,也不是都不是null。
我一直在找,但是找不到办法。
有没有办法先用代码来指定触发器?
发布于 2014-02-22 03:49:56
Entity Framework不支持触发器,尽管您当然可以手动执行将创建触发器的语句,但您需要在创建表之后执行此操作(如果使用迁移)。
您可以在EF 4.1 code-first adding a trigger to a table中使用Ladislav指定的技术
注意他的警告,然而,EF将不会意识到触发器中所做的任何更改。如果您的意图仅仅是确保表中的两列不为空,那么最好使用约束( EF也不支持约束,但您可以手动添加它们)。
发布于 2014-09-12 04:04:09
查看我的库EntityFramework.Triggers。它在实体框架层工作,因此如果有人直接修改数据库,则不会触发触发器事件。NuGet链接为https://www.nuget.org/packages/EntityFramework.Triggers/
发布于 2021-09-28 14:32:56
尽管我的library只适用于最新版本的EfCore,但它可能会对某些人有用。它扩展了SQL语法,将其转换成ModelBuilder,并通过migrationBuilder.Sql()应用接收到的代码。
modelBuilder.Entity<Transaction>()
.AfterUpdate(trigger => trigger
.Action(action => action
.Condition((transactionBeforeUpdate, transactionAfterUpdate) => transactionBeforeUpdate.IsVeryfied && transactionAfterUpdate.IsVeryfied) // Executes only if condition met
.Update<UserBalance>(
(transactionBeforeUpdate, transactionAfterUpdate, userBalances) => userBalances.UserId == oldTransaction.UserId, // Will be updated entities with matched condition
(oldTransaction, updatedTransaction, oldBalance) => new UserBalance { Balance = oldBalance.Balance + updatedTransaction.Value - oldTransaction.Value }))); // New values for matched entities.
https://stackoverflow.com/questions/21943314
复制相似问题