在我的数据库上执行CRUD操作时将消息添加到队列

时间:2017-03-14 23:59:20

标签: c# database entity-framework dbcontext

背景

我有一个MVC网站,其中包含一个实体框架代码第一个数据库(主数据库)。我还有一个报告数据库,可以将数据提供给我的报告页面。此外,我有一个队列,我可以在其中添加消息,服务将提取它并在主数据库和报告数据库之间同步数据。

请注意,数据库没有相同的架构。

问题

我想在我的队列中添加一条消息(这样我就可以在我的数据库之间同步数据) 数据库操作完成后,插入/更新/删除了记录。

我正在考虑覆盖DbContext的SaveChanges()方法并调用我的方法将消息插入队列,但我不确定这是个好主意。有什么想法吗?

或者是一个向队列添加消息的SQL触发器? (我真的不喜欢这个想法,因为我不想将我的任何业务逻辑用于SQL)。

1 个答案:

答案 0 :(得分:0)

如果你想在EF中这样做,你可以看看DbCommandInterceptor http://www.entityframeworktutorial.net/entityframework6/database-command-interception.aspx

我还建议查看SSIS,我知道您希望在代码中完成所有操作,但SSIS是专为数据迁移而构建的。我不是SSIS专家,但我知道你们都可以调用Web服务(Web服务任务)https://msdn.microsoft.com/en-us/library/ms140114.aspx并执行.net代码(脚本任务)https://msdn.microsoft.com/en-us/library/ms135944.aspx

同意在sql中有太多的业务逻辑可能是一件坏事,但如果替代方案是构建复杂的迁移代码,那么显然你需要权衡利弊。

最后一件事是数据库级别的http://tsqlt.org/单元测试,它可以帮助克服将业务逻辑存储在数据库中的一些缺点。

HTH