Ich hatte das gleiche Problem, wo wir eine Identität für den Typ wollen, aber keinen Wert angeben wollen. Der Schlüssel ist, ein SqlMetaData
zu verwenden Konstruktor für diese Spalte, die useServerDefault
festlegt auf true
:
Laut diesem Artikel auf benutzerdefinierten Tabellentyp mit Identitätsspalte in ado net verwenden von 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)