sólo tenía que encontrar una solución alternativa para esto. Necesitaba cambiar algún código antiguo para una página web, escrito para ASP.NET 2.0. La página usa Telerik RadMenu, un control de menú. Este componente requiere que los elementos raíz tengan valores adecuados DBNull (para parentID). Entonces, cuando compilé el código anterior, el componente RadMenu me dio muchos problemas. Primeras excepciones con respecto a Restricciones, entonces no entendía qué elementos eran elementos raíz y todo parecía horrible.
Pero lo resolví y esto es lo que funcionó para mí.
En la página Propiedades de la columna de ParentID en el diseñador adaptador de la tabla, he utilizado: - AllowDBNull: true - DefaultValue: -1 (-1 es un valor que no se produce normalmente para esa columna) LA NullValue -property se quedó en "Throw Exception" ya que era imposible cambiarlo.
Y en el código que usa los valores del adaptador de tabla, utilicé esta construcción (VB.código de red, no C#, como se marca esta pregunta):
Dim MenuBarTable As DAL.Page.MenuBarDataTable 'The Table Adapter
MenuBarTable = PageObj.GetMenuBar() 'The generated Get function
MenuBarTable.ParentIDColumn.AllowDBNull = True
For Each row As Page.MenuBarRow In MenuBarTable.Rows
If row.IsParentIDNull() Then
row.SetParentIDNull()
End If
Next
El código generado para los adaptadores de mesa genera dos funciones para cada columna que debe permitir DBNULLs. Deben utilizarse cuando se trata de NULL, pero es una solución torpe de Microsoft. Lo que ocurre detrás de las escenas es que el adaptador de tabla emitirá DefaultValue de la columna en lugar de NULL desde Get-function. Llamo a eso un "NULO simulado" o un "NULO falso".
La función IsParentIDNull() realmente comprobará si la fila contiene este "falso NULL", p. el DefaultValue de la columna, y cuando lo hace, estoy insertando un DBNull apropiado usando la función SetParentIDNull().
Esta solución funciona para mí, pero no es muy elegante, ni es muy eficiente, pero podría ser de ayuda para otra persona, espero.
Puede modificar la definición de propiedades de fila en el archivo .Designer del DataSet para la tabla, pero parece que se vuelve a crear cada vez que se modifica el DataSet a través del diseñador de VS, incluso si no toca la tabla específica. –