我遇到了一个问题,我认为这个问题必须是写入数据库的任何人都要解决的常见问题。我一直在想,有一个明显的解决方案,我忽略了,这就是为什么我在这里找不到合适的现有问题。
想象一下,您需要让用户创建“班级”,“学生”,并为每个“学生”分配一本或多本书。您有一个定义良好的层次结构,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。
谢谢!
答案 0 :(得分:0)
您可以使用Entity Framework来实现您的目标。
有很多教程,但这是一个很好的起点:
MSDN on getting started with Entity Framework
或链接的页面
MSDN overview page on getting started
我会为您的用例推荐EDMX方法。