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字符串被转换为数据对象,然后必须存储在数据库中。
我认为实际上有三个问题:
如何编写表示个人和包含的地址列表的SQL表?
如何编写必要的PetaPoco代码,将Person对象及其包含的任何对象插入其中?
我应该忘记将对象存储在数据库上,而只将JSON字符串存储在数据库中吗?
感谢您的浏览:)
我还没有安装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;
}
}
}
我还没有测试过,所以我不能保证它能工作,但这对我来说似乎是正确的。