Всем привет!
В классе
SqlDataProviderBase.cs
есть метод, который согласно комментарию обрезает имя БД в случае если тип определён как "dbName.type", однако этот код обрезает и имя схемы, если имя типа записано, как "dbName.schemaName.type".
Поэтому нужно исправить метод так:
public override bool DeriveParameters(IDbCommand command)
{
SqlCommandBuilder.DeriveParameters((SqlCommand)command);
foreach (SqlParameter p in command.Parameters)
{
// We have to clear UDT type names.
// Otherwise it will fail with error
// "Database name is not allowed with a table-valued parameter"
// but this is exactly the way how they are discovered.
//
if (p.SqlDbType == SqlDbType.Structured)
{
var firstDot = p.TypeName.IndexOf('.');
if (firstDot >= 0)
p.TypeName = p.TypeName.Substring(firstDot + 1);
}
}
return true;
}
После этого исправления у меня стала вызываться процедура такого вида:
CREATE TYPE bs.Ids AS TABLE ( Id int not null )
GO
create proc sc.ProcessIds
@ids bs.Ids readonly
as;
Без него — exception — не найден тип.