给定的业务对象类似于:
public class MyBase
{
public int Id { get; set; }
}
public class Parent : MyBase
{
public List<Child> Children { get; set; }
// Additional objects with 1:1 relationship
}
public class Child : MyBase
{
public Parent Parent { get; set; }
public List<Grandchild> Grandchildren { get; set; }
// Some other properties
}
public class GrandChild : MyBase
{
public Child { get; set; }
// Some other properties including a timestamp
}
由于EF 在这种情况下的性能不佳,我正在尝试用 ADO.Net 和存储过程替换最初使用 Entity Framework 编写的批量插入功能。
不是数据库专家,我首先将自己定位于
http://www.sommarskog.se/arrays-in-sql-2008.html
使用该指南,我能够创建一个性能良好(相对于 EF)的存储过程,该存储过程插入 aChild
及其List<GrandChild>
.
CREATE TYPE tvpInt32List AS TABLE (n int NOT NULL)
CREATE PROCEDURE uspInsertChild @parentId INT, @fk1Id INT, @fk2Id INT,
@listValues tvpInt32List READONLY
AS
DECLARE @id INT
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO dbo.Children VALUES(@fk2Id, @fk1Id, NULL, 0, 1, NULL, NULL, NULL, NULL, NULL, @fk1Id, @parentId)
SET @Id = SCOPE_IDENTITY()
INSERT INTO dbo.Grandchildren SELECT n, '', GETDATE(), @id FROM @listValues
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
但是,我想更进一步,创建一个接受对象数据的存储过程,然后为每个Parent
对象创建关联List<Child>
的 和。List<GrandChild>
Child
我在概念上不知道如何在存储过程中处理它。
我可以使用什么策略来传递该类型的数据结构并在存储过程中对其进行处理?