首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架6代码优先触发器

实体框架6代码优先触发器
EN

Stack Overflow用户
提问于 2014-02-22 03:17:52
回答 3查看 42.6K关注 0票数 29

我首先使用Entity Framework6代码,并想创建一个触发器。

我该怎么做呢?

我需要触发器的原因是因为用户可以直接编辑数据库,也可以通过我编写的程序编辑数据库,并且我需要确保表中的两列不都是null,也不是都不是null。

我一直在找,但是找不到办法。

有没有办法先用代码来指定触发器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-22 03:49:56

Entity Framework不支持触发器,尽管您当然可以手动执行将创建触发器的语句,但您需要在创建表之后执行此操作(如果使用迁移)。

您可以在EF 4.1 code-first adding a trigger to a table中使用Ladislav指定的技术

注意他的警告,然而,EF将不会意识到触发器中所做的任何更改。如果您的意图仅仅是确保表中的两列不为空,那么最好使用约束( EF也不支持约束,但您可以手动添加它们)。

票数 28
EN

Stack Overflow用户

发布于 2014-09-12 04:04:09

查看我的库EntityFramework.Triggers。它在实体框架层工作,因此如果有人直接修改数据库,则不会触发触发器事件。NuGet链接为https://www.nuget.org/packages/EntityFramework.Triggers/

票数 14
EN

Stack Overflow用户

发布于 2021-09-28 14:32:56

尽管我的library只适用于最新版本的EfCore,但它可能会对某些人有用。它扩展了SQL语法,将其转换成ModelBuilder,并通过migrationBuilder.Sql()应用接收到的代码。

代码语言:javascript
复制
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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21943314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档