Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 数据访问设计模式_Design Patterns - Fatal编程技术网

Design patterns 数据访问设计模式

Design patterns 数据访问设计模式,design-patterns,Design Patterns,我正在寻找一种模式,当我将记录插入数据库时,我可以将其用于父子关系。由于子记录首先需要父记录存在,我不得不使用一些讨厌的东西,比如存储会话id,然后在保存父记录后更新外键 有什么众所周知的模式可以解决这个问题。 当做 Gareth你似乎在记录孩子之前或与他们的父母同时记录,这是可能的,但有点奇怪。您的数据模型建议孩子们了解他们的父母,因此,数据建议在孩子们之前插入父母。您可能无法在单个查询中实现这一点,因为您谈论的外键引用的是同一个表a.parent->a.id.听起来您没有使用像NHibern

我正在寻找一种模式,当我将记录插入数据库时,我可以将其用于父子关系。由于子记录首先需要父记录存在,我不得不使用一些讨厌的东西,比如存储会话id,然后在保存父记录后更新外键

有什么众所周知的模式可以解决这个问题。 当做
Gareth

你似乎在记录孩子之前或与他们的父母同时记录,这是可能的,但有点奇怪。您的数据模型建议孩子们了解他们的父母,因此,数据建议在孩子们之前插入父母。您可能无法在单个查询中实现这一点,因为您谈论的外键引用的是同一个表a.parent->a.id.

听起来您没有使用像NHibernate或Hibernate这样的框架,您正在滚动自己的框架,这很好,但是如果您有此选项,您可能希望查看现有的或映射框架。如果您正在滚动自己的,并且需要执行链接插入,那么您可以使用存储库中的事务执行这些操作,例如:

public class ParentRepository
{
    public void Save(Parent parent)
    {
        using (TransactionScope scope = new TransactionScope())
        {
           //Add you database code here to insert to both tables in a transaction
        }
    }
}

您是调用存储过程还是直接插入/更新?“会话id”是什么意思?父项和子项是否同时保存?您指的是哪个外键?+1表示NHibernate,但我不认为TransactionScope会有什么帮助,所以-1表示TransactionScope会有帮助,因为如果您有一个对象层次结构,其中您有一个包含子对象的父对象,并且您正在插入一个新记录,那么您希望确保数据完整性。在事务中执行此操作将确保在插入父级而子级失败时,事务将回滚,并保持数据库的完整性。