gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:55:51 25 4
gpt4 key购买 nike

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

例如:

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

我正在使用的实际对象比上面的示例复杂得多 - 对象中至少有四个复合列表对象要插入到存储库中。

我希望能够做的是在 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 字符串存储在数据库中?

感谢观看:)

最佳答案

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

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

关于c# - PetaPoco (DotNetNuke) 和 SQL - 添加具有 List 属性的对象或其他复合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com