1

subsonic 3 を使用して、少し奇妙なシナリオのプロジェクトがあります。他のデータベース サーバーへの接続と、自動化された SMS メッセージを処理するための一連のテーブルを格納するマスター データベースに接続する必要がある .net Windows サービスがあります。次に、他のアプリケーションのメッセージを処理する他のサーバー (接続文字列テーブルは他のデータベースでは空です) に同一のデータベースがあります。

したがって、サブソニックは、接続文字列/プロバイダー名オプションを使用して、すべての DB を問題なく呼び出すことができます。

        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();
            }

正しいデータベースの接続文字列を使用して呼び出していますが、レコードが更新されません。間違って保存している場合は、お知らせください。私は新しいプロバイダーを作成して保存しようとしましたが、すでに接続が開いていると言って吠えました。ありがとう!

4

1 に答える 1

0

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);
于 2012-09-12T08:35:52.317 に答える