Arhn - архитектура программирования

Как изменить базу данных в строке подключения службы WCF?

В 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 catalog для Sismos нет проблем ни с одной из конечных точек, теоретически любой доступ к базе данных должен быть направлен на базу данных cfe_sismos.

Разве мне было недостаточно заменить значение свойства initial catalog? Любая помощь будет оценена.

ИЗМЕНИТЬ

Я только что заметил, что есть также проблемы и странное поведение при редактировании записи, например, если у меня есть запись в моей таблице Users и я редактирую Last_Name, изменение не будет отражено, когда я проверяю свою базу данных на Azure, но если Я вызываю конечную точку, которая возвращает пользователей, изменение будет присутствовать, я дал некоторое время, чтобы увидеть, была ли какая-то задержка, препятствующая отображению новейших значений в Azure, но она не показала никаких изменений. Как я могу вносить изменения в базу данных без отображения этих изменений в реальной базе данных? Если я попытаюсь вставить новую запись в таблицу, запись будет отображаться без проблем.

Таким образом, через мои конечные точки в моей службе WCF, если я вставлю что-то, оно будет показано в Azure, если я что-то отредактирую, оно не будет отображаться в Azure (но изменение будет доступно при вызове соответствующей конечной точки), и если Я хочу удалить что-то, что не будет отображаться в Azure, а изменение не будет отражено при вызове конечной точки.

Если база данных в Azure не получает никаких изменений, то откуда я могу получить всю информацию? Как будто где-то существует кешированная база данных, я действительно не понимаю, почему это происходит.

Я действительно смущен этим странным поведением, поэтому я надеюсь, что кто-то может мне помочь. Заранее спасибо.


Ответы:


1

Наконец-то я нашел причину странного поведения. Дело в том, что Entity Framework не может работать с объектами, которые скопированы из другого, полученного из объекта Context, сгенерированного Entity Framework.

Что я делал, так это сохранял данные из моих сущностей в статические списки, чтобы избежать как можно большего количества подключений к базе данных, устанавливая подключения только тогда, когда необходимы операции вставки, обновления или удаления. Но когда я попытался получить объект из этих списков и использовать его для обновления или удаления в базе данных, поскольку он не был получен из контекста, то операции недействительны. Вот почему правильно работали только операции вставки, так как это новые объекты и они могут без проблем взаимодействовать с контекстом.

Итак, в конце концов я изменил логику операций обновления и удаления в моих классах 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();

Я надеялся, что Entity Framework распознает значения объекта в моих статических списках, но, похоже, это не работает.

19.07.2013

2

В вашей конфигурации указано «начальный каталог = sismos_cfe», но вы сказали «СОЗДАТЬ БАЗУ ДАННЫХ cfe_sismos».

sismos_cfe != cfe_sismos

11.07.2013
  • это была опечатка с моей стороны в вопросе, база данных называется sismos_cfe. 12.07.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..