我正在写一个软件,它将充当一些仓库管理软件和自动化车辆硬件之间的中间人。我的程序有一个驻留在服务器上的DB的实体模型。
我们使用的车辆硬件附带了一些软件,允许它对数据库进行读写。
我想在我的实体模型中设置事件,这些事件将在特定字段更新时触发。
例如:车辆可能会遇到错误,然后它会将一些值写入数据库中的一个表中。然后,我的程序需要识别此更改并通知WM软件。
此解决方案需要事件驱动,因为我不能牺牲CPU来不断轮询数据库的更改
我已经看到了许多通过覆盖实体的SaveChanges()方法来解决此问题的解决方案,然而,在我看来,只有当更改来自应用程序本身,而不是来自外部来源时,它才会起作用。
这个是可能的吗?EF有没有内置这个,而我只是看不到它?
当物理数据库更新时,EF是否调用saveChanges()?
非常感谢
发布于 2018-11-15 22:44:10
基于similar question的this answer,答案似乎是否定的,至少在实体框架中是这样的。正如@zaitsman在评论中提到的,您也许能够使用SqlDependancy类。documentation有一个可能对您有帮助的示例:
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.
}
}
}发布于 2018-11-15 22:49:23
为了在.NET中构建消息驱动应用程序,您需要使用某种企业服务总线(enterprise service bus)架构。有许多技术可以使用.NET,但是实体框架在这里是不够的。查看: Rabbit、Azure ESB、BizTalk或支持消息传递的类似技术。基本上,当数据发生变化时需要触发一条消息。
https://stackoverflow.com/questions/28502820
复制相似问题