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

本文关键字:持久化 SQL Server 对象图 单个 事务 | 更新日期: 2023-09-27 18:14:15

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

想象这样一种情况:您需要让用户创建一个"类",其中包含"学生",每个"学生"分配一本或多本书。您有一个定义良好的层次结构,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 server分配标识列,并将其全部保存在一个事务中?假设一个班级有30个学生,每个学生都有几本书。

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

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

还有其他选择吗?我考虑在表参数中传递层次结构的每一层。我不确定这能不能行得通。(难道我不需要为我的每个表定义一个表类型,实质上是复制模式吗?)

我可以使用SQL server 2012。

谢谢!

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

你可以使用实体框架来实现你想要的。

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

MSDN关于开始使用实体框架

或链接页

MSDN入门概览页

我建议您使用EDMX方法。