【问题标题】:Service Broker with Entity Framework 6使用实体框架 6 的服务代理
【发布时间】:2014-03-27 16:39:18
【问题描述】:

我有一个 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();

我现在开始使用 Entity Framework 6.0 来完成我所有的数据库交互。我一直在尝试找到一种方法来监视队列并通过 EF 获取任何消息。到目前为止,我发现的唯一部分答案涉及非常复杂的 SQLDependency 使用,它仍然无法让我从队列中获取消息。

在 EF 中实际上有没有一种方法可以做到这一点,或者我现在是否坚持让这个区域保持不变?

【问题讨论】:

    标签: c# entity-framework service service-broker


    【解决方案1】:

    经过大量搜索后,我似乎仍然坚持使用旧方法。它没有什么大不了的,因为实体框架旨在使正常的查询更容易和更合乎逻辑,它确实做到了。

    我将把这个功能作为一种特殊情况来处理,并将其分开。

    【讨论】:

      【解决方案2】:

      我已将 EFAutoRefresh 库(最初来自 CodeProject)移植到 EF 6。它在某些数据集上运行良好,而其他数据集无法更新。试一试,任何反馈都会很棒。

      https://github.com/wonea/EFAutoRefresh

      【讨论】:

        【解决方案3】:

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

        为了澄清更多,SELECT 语句有效,但 INSERT、UPDATE 和 DELETE 不会改变任何内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 2013-09-08
          • 2015-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多