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 のパフォーマンスが低いため、元々 Entity Framework で記述された一括挿入機能を ADO.Net およびストアド プロシージャに置き換えようとしています。

DBの専門家ではないので、最初に自分自身を方向付けました

http://www.sommarskog.se/arrays-in-sql-2008.html

Childそのガイダンスを使用して、と一緒にを挿入する (EF と比較して) パフォーマンスの良いストアド プロシージャを作成することができました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>for eachを作成するストアド プロシージャを作成したいと思いますChild

ストアドプロシージャでそれにアプローチする方法について、私は概念的に途方に暮れています。

そのタイプのデータ構造を渡してストアド プロシージャで処理するには、どのような戦略を使用できますか?

4

1 に答える 1

0

親と子を入力するために、ストアドプロシージャを作成すると思います。オプションの1つは、データをxmlで送信することです。これは、親オブジェクトから簡単に抽出でき、ストアプロシージャの機能を利用してトランザクションを実行できます。 .

于 2014-12-14T11:23:26.517 に答える