3

我正在使用基于 PetaPoco (DotNetNuke 7.0) 的数据访问层。在处理相对简单的对象时,我已经成功地使用了它,但是我现在必须插入一个对象,该对象至少包含一个属性,该属性是其他对象的列表。

例如:

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

我正在使用的实际对象比上面的示例复杂得多 - 对象中至少有四个复合 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 字符串被转换为数据对象,然后必须将其存储在数据库中。

我觉得真的有三个问题:

  1. 如何编写代表 Person 和包含的地址列表的 SQL 表?

  2. 如何编写必要的 PetaPoco 代码来插入 Person 对象及其包含的任何对象?

  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 回答