0

在Azure中,我有一個名爲Sismos數據庫,這是我的WCF服務的目標,我在Azure上建立這個數據庫的副本是這樣的:如何更改WCF服務連接字符串中的數據庫?

CREATE DATABASE sismos_cfe AS COPY OF Sismos; 

這是因爲最初的數據庫只是一個測試並將用於其他目的,並且這個新的將處理此WCF服務的所有工作。

在我的WCF服務,我改變了以下線在我的Web.config文件:

<connectionStrings> 
    <add name="Model1Container" connectionString="metadata=res://*/Sismos.csdl|res://*/Sismos.ssdl|res://*/Sismos.msl; 
    provider=System.Data.SqlClient;provider connection string=&quot;data source=*******.database.windows.net; 
    initial catalog=Sismos;persist security info=True;user id=*******;password=*****; 
    multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

有了這個:

<connectionStrings> 
    <add name="Model1Container" connectionString="metadata=res://*/Sismos.csdl|res://*/Sismos.ssdl|res://*/Sismos.msl; 
    provider=System.Data.SqlClient;provider connection string=&quot;data source=******.database.windows.net; 
    initial catalog=sismos_cfe;persist security info=True;user id=*****;password=******; 
    multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

而此行中我app.cofig文件:

<connectionStrings> 
    <add name="Model1Container" connectionString="metadata=res://*/Sismos.csdl|res://*/Sismos.ssdl|res://*/Sismos.msl; 
    provider=System.Data.SqlClient;provider connection string=&quot;data source=******.database.windows.net; 
    initial catalog=Sismos;persist security info=True;user id=****;password=*****; 
    multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

有了這個:

<connectionStrings> 
    <add name="Model1Container" connectionString="metadata=res://*/Sismos.csdl|res://*/Sismos.ssdl|res://*/Sismos.msl;provider=System.Data.SqlClient; 
    provider connection string=&quot;data source=******.database.windows.net; 
    initial catalog=sismos_cfe;persist security info=True;user id=****;password=*****; 
    multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

正如你所看到的,我只替換了initial catalog屬性的值,而不是指向Sismos,它現在應該指向cfe_sismos。

我遇到的問題是,當我嘗試訪問我的一個端點來處理刪除數據庫中的條目時,根本沒有對數據庫進行任何更改。通過選擇條目或編輯/插入條目的操作,沒有問題。使用Sismos的屬性值對於任何端點都沒有問題,理論上任何數據庫訪問都應該指向cfe_sismos數據庫。

是不是用我替換initial catalog屬性值不夠?任何幫助將不勝感激。

編輯

我只注意到有當編輯的條目,例如,如果我有我的表中的用戶的入口,我編輯的姓氏也是問題和古怪的行爲,這種變化不會是當我在Azure上檢查我的數據庫時反映出來,但是如果我調用返回用戶的端點,則會出現更改,我花了一些時間來查看是否有某種延遲阻止在Azure中顯示最新值,但是它沒有顯示任何變化。如何在數據庫中進行更改而不在實際數據庫中顯示這些更改?如果我嘗試在表中插入新條目,則條目將顯示沒有問題。因此,總而言之,通過我的WCF服務中的端點,如果我插入的東西它將顯示在天藍,如果我編輯的東西它不會顯示在Azure中(但更改將可用時調用相應的端點),如果我想刪除某些內容,則不會在Azure中顯示,也不會在調用端點時反映更改。

如果Azure中的數據庫沒有收到任何更改,那麼我在哪裏獲取所有信息?這就像一個緩存數據庫存在的地方,我真的很困惑,原因正在發生。

我很困惑這種奇怪的行爲,所以我希望有人能幫助我。提前致謝。

回答

1

我終於找到了古怪行爲的原因。問題是,實體框架無法使用從實體框架生成的上下文對象獲得的對象複製的對象。

我在做的是將來自我的實體的數據存儲到靜態列表中,以避免儘可能多的數據庫連接,只在需要插入,更新或刪除操作時建立連接。但是,當我試圖從這些列表中獲取對象並使用它來更新或刪除數據庫時,由於它不是從上下文獲得的,因此這些操作是無效的。這就是爲什麼只有插入操作能夠正常工作,因爲這些是新對象,並且可以與上下文沒有任何問題進行交互。

所以最終我改變了邏輯的更新和對我的DAO類刪除操作,所以不是這樣:

Clusters cluster = (from c in DatabaseInfoHolder.ListaClusters 
    where c.ClusterId == model.ClusterId select c).FirstOrDefault(); 

我用這個去:

Clusters cluster = (from c in context.Clusters 
    where c.ClusterId == model.ClusterId select c).FirstOrDefault(); 

我希望實體框架能夠識別靜態列表中的對象的值,但似乎不能這樣工作。

0

你的配置說: 「初始目錄= sismos_cfe」 但你說: 「CREATE DATABASE cfe_sismos」

sismos_cfe!= cfe_sismos

+0

這是一個拼寫錯誤的問題,數據庫被稱爲sismos_cfe。 –

相關問題