Domanda

Ho questo SQL Server 2008 UDT:

CREATE TYPE [dbo].[IdentityType] AS TABLE(
    [Id] [int] NOT NULL
)

semplice Abbastanza. In sostanza mi permette di tenere su un elenco di id.

Ho questa stored procedure:

CREATE PROCEDURE [dbo].[Scoring_ScoreMultipleLocations]
    @LocationIds [IdentityType] READONLY,
    @DoRanking BIT = 0
AS
BEGIN
   -- irrelevant code.
END

Entity Framework 4.0 non supporta l'esecuzione di stored procedure che prendono tipi di tabella definiti dall'utente come un parametro, quindi sono un ritorno al classico ADO.NET. L'unica altra opzione sta passando una stringa separati da virgole.

In ogni caso, ho trovato questo articolo , ma è un po 'difficile da seguire .

Non capisco cosa questa riga di codice sta facendo:

DataTable dt = preparedatatable ();

Non hanno nemmeno prevedono che il metodo, quindi non ho idea di che cosa dovrei fare qui.

Questa è la mia firma di metodo:

internal static void ScoreLocations(List<int> locationIds, bool doRanking)
{
   // how do i create DataTable??
}

Quindi, ho un elenco di int e necessità di pompare che nel tipo definito dall'utente.

Qualcuno può darmi una mano / punto me un chiaro articolo su come raggiungere questo obiettivo?

È stato utile?

Soluzione

Questo articolo potrebbe essere un po 'più di aiuto.

In sostanza, si creerà un nuovo DataTable che corrisponde allo schema, poi passarlo come parametro.

Il codice di preparedatatable () probabilmente sarebbe simile al seguente:

var dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
return dt;

Dopo di che, si sarebbe dovuto aggiungere i locationIds:

foreach(var id in locationIds)
{
    var row = dt.NewRow();
    row["Id"] = id;
    dt.Rows.Add(row);
}

Poi dt assegnare come parametro:

var param = cmd.Parameters.AddWithValue("@LocationIDs", dt);
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.IdentityType";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top