首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当外部源更改数据库时,C#实体框架触发事件

当外部源更改数据库时,C#实体框架触发事件
EN

Stack Overflow用户
提问于 2015-02-13 23:21:44
回答 2查看 1.2K关注 0票数 1

我正在写一个软件,它将充当一些仓库管理软件和自动化车辆硬件之间的中间人。我的程序有一个驻留在服务器上的DB的实体模型。

我们使用的车辆硬件附带了一些软件,允许它对数据库进行读写。

我想在我的实体模型中设置事件,这些事件将在特定字段更新时触发。

例如:车辆可能会遇到错误,然后它会将一些值写入数据库中的一个表中。然后,我的程序需要识别此更改并通知WM软件。

此解决方案需要事件驱动,因为我不能牺牲CPU来不断轮询数据库的更改

我已经看到了许多通过覆盖实体的SaveChanges()方法来解决此问题的解决方案,然而,在我看来,只有当更改来自应用程序本身,而不是来自外部来源时,它才会起作用。

这个是可能的吗?EF有没有内置这个,而我只是看不到它?

当物理数据库更新时,EF是否调用saveChanges()?

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2018-11-15 22:44:10

基于similar questionthis answer,答案似乎是否定的,至少在实体框架中是这样的。正如@zaitsman在评论中提到的,您也许能够使用SqlDependancy类。documentation有一个可能对您有帮助的示例:

代码语言:javascript
复制
void SomeMethod()
{
    // Assume connection is an open SqlConnection.

    // Create a new SqlCommand object.
    using (SqlCommand command=new SqlCommand(
        "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers",
        connection))
    {

        // Create a dependency and associate it with the SqlCommand.
        SqlDependency dependency=new SqlDependency(command);
        // Maintain the reference in a class member.

        // Subscribe to the SqlDependency event.
        dependency.OnChange+=new
           OnChangeEventHandler(OnDependencyChange);

        // Execute the command.
        using (SqlDataReader reader = command.ExecuteReader())
        {
            // Process the DataReader.
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-11-15 22:49:23

为了在.NET中构建消息驱动应用程序,您需要使用某种企业服务总线(enterprise service bus)架构。有许多技术可以使用.NET,但是实体框架在这里是不够的。查看: Rabbit、Azure ESB、BizTalk或支持消息传递的类似技术。基本上,当数据发生变化时需要触发一条消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28502820

复制
相关文章

相似问题

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