在单个事务中将对象图持久保存到SQL Server

时间:2013-05-17 18:46:41

标签: c# .net sql sql-server

我遇到了一个问题,我认为这个问题必须是写入数据库的任何人都要解决的常见问题。我一直在想,有一个明显的解决方案,我忽略了,这就是为什么我在这里找不到合适的现有问题。

想象一下,您需要让用户创建“班级”,“学生”,并为每个“学生”分配一本或多本书。您有一个定义良好的层次结构,Class-> Student-> Book。

您有以下表格:

CREATE TABLE Classes (
    ClassId int identity(1,1) primary key,
    ClassName nvarchar(255)
    )

CREATE TABLE Students (
    StudentId int identity(1,1) primary key,
    ClassId int,
    StudentName nvarchar(255),
    StudentImage image
    )

CREATE TABLE StudentBooks (
    StudentBookId int identity(1,1) primary key,
    StudentId int,
    BookName nvarchar(255)
    )

通过这种人为设想的场景,我可以选择保存整个新对象图,同时让SQL服务器分配标识列,并将其全部保存在一个事务中?假设一个班级可能有30名学生,并且每个学生都分配了几本书。

我可以创建一个事务并为每个表中的每一行单独调用,为每个新的父对象返回SCOPE_IDENTITY,这样我就可以保存每个子节点,同时保持RI不变。

我可以使用XML。我想避免这种情况,因为图中包含一个字节数组。

还有其他选择吗?我考虑过在表参数中传递层次结构的每个级别。我不确定这是怎么回事。 (我不是必须为每个表定义一个表类型,基本上是复制模式吗?)

我可以使用SQL Server 2012。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用Entity Framework来实现您的目标。

有很多教程,但这是一个很好的起点:

MSDN on getting started with Entity Framework

或链接的页面

MSDN overview page on getting started

我会为您的用例推荐EDMX方法。