Дозвуковой 3 Сохранение в разные базы данных

Используя дозвуковой 3, у меня есть проект со странным сценарием. У меня есть служба Windows .net, которой необходимо подключиться к основной базе данных, в которой хранятся подключения к другим серверам баз данных, а также набор таблиц для обработки автоматических SMS-сообщений. Затем у меня есть идентичные базы данных на других серверах (таблица строк подключения пуста на других базах данных), которые обрабатывают сообщения для других приложений.

Таким образом, subsonic может нормально обращаться ко всем БД, используя параметры строки подключения / имени поставщика.

        public static List<SMSRequestWithResponseList> SMSRequestListGetAll(string applicationName)
    {
        string connStr = GetConnectionStringByApplicationName(applicationName);

        List<SMSRequestWithResponseList> response = new List<SMSRequestWithResponseList>();

        List<DAL.CDYNESMSRequest> lst = DAL.CDYNESMSRequest.All(connStr, providerName).ToList();

        foreach (DAL.CDYNESMSRequest mitm in lst)
        {
            SMSRequestWithResponseList itm = new SMSRequestWithResponseList(mitm, mitm.CDYNESMSResponses.ToList(), string.Empty);
            response.Add(itm);
        }

        return response;
    }

Проблема в сохранении ... Вставка вроде работает.

DAL.CDYNESMSRequest itm = new DAL.CDYNESMSRequest(connStr, providerName).;
            itm.KeyCode = KeyCode;
            itm.ApplicationName = ApplicationName;
            itm.BatchTransaction = BatchTransaction;
            itm.AssignedDID = GetParameter("AssignedDID");
            itm.PhoneNumber = PhoneNumber;
            itm.MessageDetail = MessageText;
            itm.MessageCancelled = false;
            itm.MessageQueued = false;
            itm.MessageSent = false;
            itm.IsImmediate = SendImmediate;
            itm.InQueue = false;
            itm.ScheduledDateTime = ScheduledDateTime;
            itm.CreateDT = dt;
            itm.ModifiedDT = dt;
            itm.Save();

Но вроде не хочет обновляться ...

                DAL.CDYNESMSRequest itm = DAL.CDYNESMSRequest.SingleOrDefault(x => x.RequestID == requestID, connStr, providerName);
            if (itm != null)
            {
                itm.MessageID = messageGUID;
                itm.MessageCancelled = messageCancelled;
                itm.MessageQueued = messageQueued;
                itm.ReferenceID = messageReferenceID;
                itm.MessageSent = messageSent;
                if (messageSentDT < new DateTime(1753, 1, 1, 0, 0, 0))
                    itm.MessageSentDT = null;
                else
                    itm.MessageSentDT = messageSentDT;
                itm.MessageSMSError = messageSMSError;
                itm.ModifiedDT = dt;
                itm.Save();
            }

Я вызываю, используя строку подключения из правильной базы данных, но она не обновляет запись. Если я сохраняю его неправильно, дайте мне знать. Я пытался создать нового провайдера и установить его на сохранение, но он рявкнул на меня, сказав, что у него уже есть открытое соединение. Спасибо!


person user1664422    schedule 12.09.2012    source источник


Ответы (1)


Не используйте шаблон ActiveRecord, а используйте SimpleRepository, который позволяет вам настроить несколько репозиториев, и вы можете указать строку подключения для каждого репо.

// not sure if this is the right constructor or if it's providerName, connectionString
var repo1 = new SimpleRepository(connectionString1, providerName);
var repo2 = new SimpleRepository(connectionString2, providerName);

var item = repo1.Single<Product>(1);

if (repo2.Exists<Product>(x => x.Id == item.Id))
    repo2.Update(item);
else
    repo2.Add(item);
person Jürgen Steinblock    schedule 12.09.2012