2014-03-27 84 views
1

我有一個使用Service Broker的隊列中獲得所需要的一些處理通知的Windows服務:服務代理與實體框架6

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中是否有這樣做的方法,或者我現在堅持這個區域不變嗎?

回答

0

同意@Rob。我花了相當長的時間來弄清楚這個問題,並得出結論認爲Service Broker(SB)在這個階段不會與Entity Framework 6相處(我的是6.1.1)。所有使用不帶SB的EF創建的單元測試(實際上是使用LocalDB)是成功的,但是,一旦它們與SB集成,它們將無法工作。

要澄清更多,SELECT語句工作,但INSERT,UPDATE和DELETE不會改變任何東西。

0

經過大量的搜索後,它看起來像我堅持舊的做法。它沒有真正的巨大優勢,因爲實體框架是爲了使正常查詢更容易,而且更符合邏輯。

我打算把這個功能作爲一個特例來處理,並且保持它的獨立性。