PetaPoco(DotNetNuke)和SQL-添加具有List属性的对象或其他复合对象

本文关键字:对象 List 属性 复合 其他 DotNetNuke 添加 SQL- PetaPoco | 更新日期: 2023-09-27 17:57:30

我使用的是基于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. 如何编写表示个人和包含的地址列表的SQL表?

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

  3. 我应该忘记将对象存储在数据库上,而只将JSON字符串存储在数据库中吗?

感谢您的浏览:)

PetaPoco(DotNetNuke)和SQL-添加具有List属性的对象或其他复合对象

我还没有安装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;
        }
    }
}

我还没有测试过,所以我不能保证它能工作,但这对我来说似乎是正确的。

相关文章: