Katakanlah Anda ingin mengirim tabel dengan satu kolom GUID.
Pertama kita perlu membuat struktur menggunakan SqlMetaData yang mewakili skema tabel (kolom).
Kode di bawah ini menunjukkan satu kolom bernama "Id" dari GUID adalah tipe tabel parameter prosedur tersimpan SQL
var tableSchema = new List<SqlMetaData>(1)
{
new SqlMetaData("Id", SqlDbType.UniqueIdentifier)
}.ToArray();
Selanjutnya Anda membuat daftar catatan yang cocok dengan skema menggunakan SqlDataRecord .
Kode di bawah ini menunjukkan cara menambahkan item di dalam daftar menggunakan skema yang dibuat di atas. Buat SqlDataRecord baru untuk setiap item dalam daftar. Ganti SetGuid dengan jenis yang sesuai dan Ganti Guid.NewGuid() sebagai nilai yang sesuai.Ulangi SqlDataRecord baru untuk setiap item dan tambahkan ke Daftar
var tableRow = new SqlDataRecord(tableSchema);
tableRow.SetGuid(0, Guid.NewGuid());
var table = new List<SqlDataRecord>(1)
{
tableRow
};
Kemudian buat SqlParameter :
var parameter = new SqlParameter();
parameter.SqlDbType = SqlDbType.Structured;
parameter.ParameterName = "@UserIds"; //@UserIds is the stored procedure parameter name
parameter.TypeName = "{Your stored procedure type name}"
parameter.Value = table;
var parameters = new SqlParameter[1]
{
parameter
};
Kemudian cukup panggil prosedur tersimpan dengan menggunakan Database .SqlQuery .
IEnumerable<ReturnType> result;
using (var myContext = new DbContext())
{
result = myContext.Database.SqlQuery<User>("GetUsers @UserIds", parameters)
.ToList(); // calls the stored procedure
// ToListAsync(); // Async
{
Di SQL Server, buat Jenis Tabel Buatan Pengguna Anda (saya akhiri dengan TTV, Nilai Ketik Tabel):
CREATE TYPE [dbo].[UniqueidentifiersTTV] AS TABLE(
[Id] [uniqueidentifier] NOT NULL
)
GO
Kemudian tentukan jenisnya sebagai parameter (jangan lupa, Nilai Jenis Tabel harus readonly!):
CREATE PROCEDURE [dbo].[GetUsers] (
@UserIds [UniqueidentifiersTTV] READONLY
) AS
BEGIN
SET NOCOUNT ON
SELECT u.* -- Just an example :P
FROM [dbo].[Users] u
INNER JOIN @UserIds ids On u.Id = ids.Id
END