2013-05-17 60 views
1

我有一个问题来了,我想一定是让任何人写入数据库来解决共同问题的解决方案。我一直在想,我忽略了一个明显的解决方案,这就是为什么我在这里找不到合适的现有问题的原因。坚持对象图到SQL Server在单个事务

想象一下,你需要让用户创建一个“类”,与“学生”的情况下,每个“学生”被分配给一个或更多的书。你有一个明确的层次结构,类 - >学生 - >书。

您有以下表格:

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这一点。

谢谢!

+2

实体框架已经自动解决这一点,正确地设置标识值在图中的每个对象。也许你应该考虑使用像EF这样的ORM,而不是重新发明轮子。 –

+0

你是否已经检查过一个ORM包装器? EF很容易使用,并做你想做的。 –

+0

实体框架。 – Dan

回答