我将一个完整的框架项目移植到.NET Core 2.0。它打电话给
var builder = SqlClientFactory.Instance.CreateCommandBuilder();
...
所以我创建了一个新的.NET Core项目并添加了对System.Data.SqlClient
4.4.0的引用。不幸的是,似乎DbProviderFactory.CreateCommandBuilder
未被覆盖,因此对CreateCommandBuilder
的调用始终会返回null
。
我已经尝试检查此API是否正式可用,而on the first sight似乎是这样。因为该页面说:
我使用的System.Data.SqlClient
4.4.0 高于4.3.1。
然而,在我的下一个惊喜中,我发现typeof(SqlClientFactory).Assembly
说System.Data.SqlClient
4.2.0。。我必须学习assembly and package versions are allowed to be inconsistent。我不确定,为什么https://apisof.net告诉我Core 2.0。它似乎不可信任。
所以,我去了the .NET API Browser,他正确地没有为CreateCommandBuilder
列出SqlClientFactory
。
我的问题是,如何才能获得前面提到的System.Data.SqlClient, Version=4.3.1
汇编?在撰写本文时,我使用的4.4 nuget似乎是最新版本。
我唯一能想到的就是编译我自己的corefx
结帐,以便获得有效CreateCommandBuilder
。或者像SqlCommandBuilder
一样开始复制点点滴滴。但我不知道这是不是一个好主意。