Nové rozhraní API s obecnými parametry má skutečně problém – mělo by přijímat běžné .NET null
(a nikoli DBNull.Value
), otevřel jsem tento problém
Chcete-li to sledovat, bude to opraveno ve verzi 4.0.3.
Všimněte si, že jako poznámka k dokumentaci
říká, že smyslem generického API je vyhnout se použití Value
vlastnost, která je typu object
. Pokud použijete obecný NpgsqlParameter<int>
ale přiřaďte Value
, bude vaše int zaškatulkováno, čímž se ztratí účel API. Měli byste přiřazovat TypedValue
, který je typu int
a nebude boxovat. To je také důvod, proč nemůžete přiřadit DBNull.Value
k označení hodnoty null (je to jiný typ .NET).
Několik poznámek o tom, zda by se mělo používat toto nové generické API:
- Pokud píšete mnoho typů hodnot (např.
int
,DateTime
...) tím se odstraní všechny boxerské alokace. Zda to bude významné, závisí na vaší aplikaci – pečlivě profilujte. - Obecná rozhraní API by obecně měla být vždy upřednostňována před negenerickými, pokud je typ znám v době kompilace. To umožňuje kompilátoru včasně zkontrolovat správnost typu a činí váš kód přehlednějším – používáme
List<string>
spíše nežArrayList
jako věc dobrého kódování, i když výkon není problém - Hlavní (jedinou?) nevýhodou generického API je to, že je specifické pro Npgsql, takže váš kód nelze přenést na jiné databázové ovladače (ačkoli existuje problém za vytvoření této (nebo něčeho podobného) součástí ADO.NET).