J'ai eu le même problème où nous voulons une identité sur le type, mais nous ne voulons pas fournir de valeur. La clé est d'utiliser un SqlMetaData
constructeur pour cette colonne qui définit useServerDefault
à true
:
Selon cet article sur utilisation du type de table défini par l'utilisateur avec la colonne d'identification dans ado net par Tim Van Wassenhove
SQL :
CREATE TYPE [Star].[example] AS TABLE(
[Ordinal] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](200) NOT NULL,
)
C# :
var sqlMetaData = new[]
{
new SqlMetaData("Ordinal", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
new SqlMetaData("Name", SqlDbType.NVarChar, 200)
};
sqlRecords = new HashSet<SqlDataRecord>(usersToInclude.Select(user =>
{
var record = new SqlDataRecord(sqlMetaData);
record.SetString(1, user.Name);
return record;
}));
new SqlMetaData("IdentityField", SqlDbType.Int, true, false, SortOrder.Unspecified, -1)