0

给定的业务对象类似于:

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

我在概念上不知道如何在存储过程中处理它。

我可以使用什么策略来传递该类型的数据结构并在存储过程中对其进行处理?

4

1 回答 1

0

猜你写的存储过程,为了输入父母和孩子,其中一种选择是以xml发送你的数据,这又可以很容易地从你的父对象中提取出来,并利用存储过程的力量来做你的交易.

于 2014-12-14T11:23:26.517 回答