Lad os sige, at du vil sende en tabel med en enkelt kolonne af GUID'er.
Først skal vi oprette en struktur ved hjælp af SqlMetaData som repræsenterer tabellens skema (kolonner).
Nedenstående kode viser, at en kolonne med navnet "Id" af GUID'en er den parametertabeltype for SQL-lagrede procedure
var tableSchema = new List<SqlMetaData>(1)
{
new SqlMetaData("Id", SqlDbType.UniqueIdentifier)
}.ToArray();
Dernæst opretter du en liste over poster, der matcher skemaet ved hjælp af SqlDataRecord .
Nedenstående kode viser, hvordan man tilføjer elementerne i en liste ved hjælp af det ovenfor oprettede skema. Opret en ny SqlDataRecord for hvert af elementerne på listen. Erstat SetGuid med den tilsvarende type og Erstat Guid.NewGuid() som den tilsvarende værdi. Gentag ny SqlDataRecord for hvert element, og føj dem til en liste
var tableRow = new SqlDataRecord(tableSchema);
tableRow.SetGuid(0, Guid.NewGuid());
var table = new List<SqlDataRecord>(1)
{
tableRow
};
Opret derefter 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
};
Kald derefter blot den lagrede procedure ved at bruge databasen .SqlQuery .
IEnumerable<ReturnType> result;
using (var myContext = new DbContext())
{
result = myContext.Database.SqlQuery<User>("GetUsers @UserIds", parameters)
.ToList(); // calls the stored procedure
// ToListAsync(); // Async
{
I SQL Server skal du oprette din brugerdefinerede tabeltype (jeg suffixer dem med TTV, tabeltypeværdi):
CREATE TYPE [dbo].[UniqueidentifiersTTV] AS TABLE(
[Id] [uniqueidentifier] NOT NULL
)
GO
Angiv derefter typen som en parameter (glem ikke, tabeltypeværdier skal være skrivebeskyttet!):
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