带有实体框架的服务代理

本文关键字:服务 代理 框架 实体 | 更新日期: 2023-09-27 17:54:38

我有一个Windows服务,它使用service Broker队列来获取需要某些处理的通知:

var cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["MathsEngine.Properties.Settings.TargetConnectionString"].ToString());
var cmd = new SqlCommand("WAITFOR ( RECEIVE * FROM dbo.MathsEngineQueue);", cnn) {CommandTimeout = 0};
cnn.Open();
// Execute the command - we will wait here until a new entry appears in the Notification Queue
//
SqlDataReader reader = cmd.ExecuteReader();
// Get the message text from the reader
//
while (reader.Read())
{
    // Get the message body text and convert into a legible format
    //
    _messageText = Encoding.Unicode.GetString(reader.GetSqlBinary(reader.GetOrdinal("message_body")).Value);
}
reader.Close();
reader.Dispose();
cmd.Dispose();

我现在开始使用实体框架6.0做我所有的数据库交互。我一直在试图找到一种方法来监控队列并通过EF获取任何消息。到目前为止,我找到的唯一部分答案涉及到非常复杂的SQLDependency的使用,它仍然不能让我从队列中获取消息。

实际上有一种方法可以在EF中做到这一点,或者我现在卡住了这个区域不变?

带有实体框架的服务代理

在进行了大量的搜索之后,看起来我还是坚持使用旧的方法。这没什么大不了的,因为实体框架的目的是使正常的查询更容易,更合乎逻辑,它确实做到了。

我将把这个功能作为一个特例,并将其分开。

我已经将EFAutoRefresh库(最初来自CodeProject)移植到EF 6。它在一些数据集上工作正常,而其他数据集则无法更新。试玩一下吧,有什么反馈就太好了。

https://github.com/wonea/EFAutoRefresh

同意@Rob。我也花了相当多的时间来弄清楚这个问题,并得出结论,Service Broker (SB)在这个阶段不会与Entity Framework 6(我的是6.1.1)相处。所有的单元测试(与LocalDB,实际上)我创建,使用EF没有SB,是成功的,但是,一旦他们与SB集成,他们将无法工作。

更明确地说,SELECT语句可以工作,但是INSERT, UPDATE和DELETE不会改变任何东西。