2017-02-28 4 views
1

TableValueParameter(TVP)と他のパラメータを含むパラメータをストアドプロシージャに渡すために正しいDapper構文を理解することができません。私のコードの簡易版:TableValueParameterを含むDapperストアドプロシージャ

CLASS

public class GalleryViewModel 
{ 
    public string GalleryName { get; set; } 
    public string Category { get; set; } 
    public IEnumerable<Image> Images { get; set; } 
} 

public class Image 
{ 
    public string FileName { get; set; } 
    public int Order { get; set; } 
} 

C#スニペット

var param = new DynamicParameters(); 
param.Add("@Images", model.Images);//TVP 
param.Add("@GalleryName", model.GalleryName); 
param.Add("@Category", model.Category); 

connection.Execute("CreateGallery", param, commandType: CommandType.StoredProcedure); 

SQLスニペット

--Create table type 
CREATE TYPE GalleryImageType AS TABLE 
( 
    FileName NVARCHAR(64), 
    Order  INT 
) 
GO 

CREATE PROCEDURE [dbo].[CreateGallery] 
    @Images    GalleryImageType READONLY, 
    @GalleryName  NVARCHAR(32), 
    @Category   NVARCHAR(32) 
AS 
-- SPROC contents here.... 
+0

代わりにIEnumerableをを渡すので、あなただけのviewmodel.imagesを使用してデータテーブルを作成し、移入、DataTableの種類を提供し、コマンドのパラメータとしてのDataTableを渡す必要があります。 – Aldo

答えて

3

U DataTableの代わりにIEnumerableをのインスタンスをSE:

DataTable dt = new DataTable(); 
dt.Columns.Add("FileName"); 
dt.Columns.Add("Order"); 

foreach (var image in viewmodel.Images) 
{ 
    dt.Rows.Add(image.FileName, image.Order); 
} 

var param = new DynamicParameters(); 
param.Add("@Images", dt);//TVP 
param.Add("@GalleryName", model.GalleryName); 
param.Add("@Category", model.Category); 

connection.Execute("CreateGallery", param, commandType: CommandType.StoredProcedure); 
+0

ありがとう、これはまさに必要なものです。 – PixelPaul

関連する問題