Subsonic 3 Сохранение в разных базах данных
Используя Subson 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();
}
Я звоню, используя строку подключения из правильной базы данных, но она не обновляет запись. Если я сохраняю это неправильно, пожалуйста, дайте мне знать. Я попытался создать нового провайдера и установить его на сохранение, но он рявкнул на меня, говоря, что у него уже было открытое соединение. Спасибо!
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);