0

在 Azure 中,我有一个名为 Sismos 的数据库,这是我的 WCF 服务的目标,我在 Azure 上创建了这个数据库的副本,如下所示:

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。

我遇到的问题是,当我尝试访问处理删除数据库中的条目的端点之一时,数据库中根本没有任何更改。选择条目或编辑/插入条目的操作没有问题。使用initial catalogSismos 的属性值,任何端点都没有问题,理论上任何数据库访问都应定向到 cfe_sismos 数据库。

initial catalog我更换财产价值还不够吗?任何帮助将不胜感激。

编辑

我只是注意到在编辑条目时也存在问题和奇怪的行为,例如,如果我的表用户中有一个条目并且我编辑了 Last_Name,那么当我在 Azure 上检查我的数据库时,更改将不会反映,但是如果我调用返回用户的端点,更改将会出现,我给了一些时间查看是否存在某种延迟,阻止在 Azure 中显示最新值,但它没有显示任何更改。如何在数据库中进行更改而不在实际数据库中显示这些更改?如果我尝试将新条目插入表中,则该条目将毫无问题地显示。

因此,总而言之,通过我的 WCF 服务中的端点,如果我插入一些内容,它将以 azure 显示,如果我编辑一些内容,它将不会显示在 Azure 中(但在调用相应的端点时更改将可用),如果我想删除不会在 Azure 中显示的内容,也不会在调用端点时反映更改。

如果 Azure 中的数据库没有收到任何更改,那么我从哪里获得所有信息?就像某个地方存在缓存数据库一样,我真的很困惑发生这种情况的原因。

我对这种奇怪的行为感到非常困惑,所以我希望有人能帮助我。提前致谢。

4

2 回答 2

1

我终于找到了奇怪行为的原因。问题是 Entity Framework 不能处理从另一个从 Entity Framework 生成的 Context 对象中复制的对象。

我所做的是将实体中的数据存储到静态列表中,以避免与数据库的连接尽可能多,仅在需要插入、更新或删除操作时才建立连接。但是当我试图从这些列表中获取一个对象并使用它来更新或删除数据库时,因为它不是从上下文中获取的,所以操作是无效的。这就是为什么只有插入操作正常工作的原因,因为这些是新对象并且可以与上下文交互而没有问题。

所以最后我改变了我的 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();

我希望实体框架能够识别我的静态列表中对象的值,但它似乎不是那样工作的。

于 2013-07-19T17:47:40.370 回答
0

您的配置显示“初始目录 = sismos_cfe”,但您说“创建数据库 cfe_sismos”

sismos_cfe != cfe_sismos

于 2013-07-11T19:44:50.380 回答