3

PetaPoco (DotNetNuke 7.0) に基づくデータ アクセス レイヤーを使用しています。比較的単純なオブジェクトを扱うときはうまく使用できましたが、他のオブジェクトのリストであるプロパティを少なくとも 1 つ含むオブジェクトを挿入する必要があります。

例えば:

class Person
{
   public Person(){}
   public string name { get; set; }
   public List<Address> addresses { get; set; }
}
class Address
{
   ...
}

私が扱っている実際のオブジェクトは、上記の例よりもはるかに複雑です。リポジトリに挿入されるオブジェクトには、少なくとも 4 つの複合 List オブジェクトがあります。

私ができるようにしたいのは、SQL でテーブルを定義し、次のように PetaPoco を簡単に呼び出すことができるようにすることです。

public static void AddOrder(Person person)
{
    using (IDataContext context = DataContext.Instance())
    {
        var repository = context.GetRepository<Person>();
        repository.Insert(person);
    }
}

これの背景には、オブジェクトが Knockout/jQuery フロントエンドから Web サービスに渡されるため、JSON 文字列がデータ オブジェクトに変換され、データベースに格納する必要があります。

私は本当に3つの質問があると思います:

  1. Person とそこに含まれる Addresses List を表す SQL テーブルを作成するにはどうすればよいですか?

  2. Person オブジェクトをそれに含まれるオブジェクトと一緒に挿入するために必要な PetaPoco コードを作成するにはどうすればよいですか?

  3. オブジェクトをデータベースに保存しようとすることを忘れて、代わりに JSON 文字列をデータベースに保存する必要がありますか?

見てくれてありがとう:)

4

1 に答える 1

1

DotNetNuke 7 はまだインストールしていませんが、codeplex でソース コードを調べたところ、次の方法でインストールできると思います。

public static void AddOrder(Person person)
{
    using (IDataContext context = DataContext.Instance())
    {
        var repositoryPerson = context.GetRepository<Person>();
        var repositoryAddrress = context.GetRepository<Address>();

        context.BeginTransaction();
        try 
        {
            repositoryPerson.Insert(person);
            foreach(var address in person.addresses)
            {
                repositoryAddress.Insert(address);
            }
            context.Commit();
        }
        catch (Exception) 
        {
           context.RollbackTransaction();
           throw;
        }
    }
}

私はそれをテストしていないので、動作を保証することはできませんが、これは私には正しいようです.

于 2013-02-06T09:18:45.250 に答える