0

すぐにアクティブレコードを実行することができました。開始するための手順は素晴らしく、すぐに既存のデータベースでウィジェットを作成して読み取ることができるWebサービスを構築しました。それはすごかった。しかし、更新に関しては、物事は崩壊しました。クライアントでオブジェクトを編集してサービスに送り返しますが、サービスがオブジェクトを保存すると、新しいオブジェクトが作成されます。これは、dbを再クエリし、クライアントからサービスに送信された値を割り当てる必要があることを意味すると考えましたが、上司は、それはハッキーであり、pocosを使用できるため、リポジトリパターンの方が優れていると述べました。残念ながら、それは私が得たガイダンスの範囲です。これが私の質問です。

  1. t4テンプレートはアクティブレコードにのみ適していますか、それとも単純なリポジトリを構築しますか?たとえば、私のポコを生成するものはありますか、それともすべて「自分でロール」しますか?

  2. 亜音速の3層ソリューションの実用的な例を見た人はいますか?それらについて読んだことがありますが、サンプルが浮かんでいますか?

アクティブレコードのサンプル/スクリーンキャストは、私が始めたのと同じ時点で開始されたため、非常に簡単にフォローできました。単純なリポジトリのものは、移行やその他の高度な機能に重点を置いているようで、このようなものは私にとって新しいものであるため、点をつなぐのに十分な知識がありません。

うーん。何かを学び、週末までに実行する期限を設けることほど素晴らしいことはありません。私が読むべきだったマニュアルへのリンクが付いたrtfmであっても、どんなアドバイスも歓迎します。

前もって感謝します

4

1 に答える 1

0

リポジトリパターンを使用する場合は、linqテンプレートを使用するか、t4テンプレートを必要としない単純なリポジトリを使用できます。

シンプルなリポジトリを使用して、pocosを自分で作成します。次の場合、Subsonicはデータベーススキームを作成または更新できます。

var repository=new SimpleRepository(SimpleRepositoryOptions.RunMigrations);

しかし、あなたが私に尋ねたら、私はSimpleRepositoryOptions.None自分でデータベースを選択して更新します。

とにかく、ActiveRecordテンプレートに関する最初の問題はかなり簡単に修正できます。ActiveRecordオブジェクトはクライアント側でシリアル化され、サーバーで逆シリアル化されることをお勧めします。

ActiveRecordオブジェクトのデフォルトのコンストラクターは、次のようなInit関数を呼び出します。

    void Init(){
        TestMode=this._db.DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase);
        _dirtyColumns=new List<IColumn>();
        if(TestMode){
            <#=tbl.ClassName#>.SetTestRepo();
            _repo=_testRepo;
        }else{
            _repo = new SubSonicRepository<<#=tbl.ClassName#>>(_db);
        }
        tbl=_repo.GetTable();
        SetIsNew(true);
        OnCreated();       

    }

ご覧のとおり、内部リポジトリが作成されてSetIsNew(true)実行されます。あなたがしなければならない唯一のことはmyitem.SetIsNew(false)、オブジェクトが逆シリアル化された値で埋められた後に呼び出すことです。保存中に更新クエリを実行するようにsubsonicに指示するにはこれで十分だと思います。

于 2011-01-29T13:21:53.200 に答える