我正在使用基于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字符串将转换为数据对象,然后必须将其存储在数据库中。
我认为实际上有三个问题:
如何编写代表Person和包含的地址列表的SQL表?
如何编写必要的PetaPoco代码以将Person对象与其包含的任何对象一起插入?
我是否应该忘记尝试将对象存储在数据库上,而只是将JSON字符串存储在数据库中?
感谢您寻找:)
答案 0 :(得分: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;
}
}
}
我没有测试过,所以我不能保证它有效,但这似乎对我来说。