Class 图书馆,Entity Framework Code First & Microsoft.SqlServer.Types
Class Library, Entity Framework Code First & Microsoft.SqlServer.Types
我在尝试获取代码优先 Entity Framework 6.0 以使用 Microsoft.SQLServer.Types
构建迁移时遇到了一些问题。我仍然不断收到:
Spatial types and functions are not available for this provider because the assembly 'Microsoft.SqlServer.Types' version 10 or higher could not be found.
无论我在哪里,他们都在谈论 运行ning:
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
或 global.asax
中的类似内容。我需要在 class 库中 运行 处理我的应用程序的数据层,因此没有启动事件。
我输入了
[assembly: PreApplicationStartMethod(typeof(Test.Startup), "Start")]
namespace Test
{
public class Startup
{
public static void Start()
{
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
}
}
}
但这并没有起到任何作用。还有其他想法吗?
谢谢
克里斯
哦!我上周刚遇到这个问题!
让我们首先澄清一些事情。此错误是由于缺少管理 Sql 服务器空间类型的程序集造成的。您可以通过以下任一方式解决此问题:
- 正在计算机上安装 SQL 服务器
- 依赖于 NuGet 包。
通常情况下,使用 NuGet 包更容易,所以我将对此进行解释。
版本NuGet package that you get depends on the version of Sql Server that you have running. My version of Sql Server is 11.0.6020.0
, so I installed the 11.0.2
version of the NuGet package。这非常重要以匹配版本。
您需要 三个 个程序集。
Microsoft.SqlServer.Types.dll
msvcr<Version>.dll
SqlServerSpatial<Version>.dll
Microsoft.SqlServer.Types.dll
是一个 managed 程序集,而另外两个是 native 程序集。
如果您安装了 正确版本 的 NuGet 包,那么所有这些都应该为您处理。
安装 NuGet 包后,它会打开一个自述文件,它给出了如何使用 Loader
class.
加载本机程序集的示例
代码示例:
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
最后,您需要覆盖 SqlProviderServices
静态 class 中的 SqlServerTypesAssemblyName
属性。 注意 这仅在更高版本的 EntityFramework 中可用。我正在使用 EntityFramework 6.1.3。在我的研究中,其他人说这在早期版本中不可用。
我再次使用版本 11.0.2
来匹配我的 Sql 服务器版本 ,所以我使用了以下代码:
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
如果您使用的是较新版本的 Sql 服务器,您应该能够将 11
替换为 12
、13
或 [=25] =] 没有问题。
如果它不起作用,这里有一个快速检查清单:
- 确保
Microsoft.SqlServer.Types.dll
被引用。
- 确保 native 程序集被复制到
..\SqlServerTypes\<Platform>\
文件夹下的 bin 目录中。应该有两个.
- 确保在 任何数据库操作之前设置调用
LoadNativeAssemblies
并设置 SqlServerTypesAssemblyName
,包括创建 DbContext 实例。
- 如果您的 DbContext 位于与执行程序集不同的程序集中,您可能 需要引用
Microsoft.SqlServer.Types
程序集。它可能无法通过 build/reference 过程复制。
我在尝试获取代码优先 Entity Framework 6.0 以使用 Microsoft.SQLServer.Types
构建迁移时遇到了一些问题。我仍然不断收到:
Spatial types and functions are not available for this provider because the assembly 'Microsoft.SqlServer.Types' version 10 or higher could not be found.
无论我在哪里,他们都在谈论 运行ning:
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
或 global.asax
中的类似内容。我需要在 class 库中 运行 处理我的应用程序的数据层,因此没有启动事件。
我输入了
[assembly: PreApplicationStartMethod(typeof(Test.Startup), "Start")]
namespace Test
{
public class Startup
{
public static void Start()
{
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
}
}
}
但这并没有起到任何作用。还有其他想法吗?
谢谢
克里斯
哦!我上周刚遇到这个问题!
让我们首先澄清一些事情。此错误是由于缺少管理 Sql 服务器空间类型的程序集造成的。您可以通过以下任一方式解决此问题:
- 正在计算机上安装 SQL 服务器
- 依赖于 NuGet 包。
通常情况下,使用 NuGet 包更容易,所以我将对此进行解释。
版本NuGet package that you get depends on the version of Sql Server that you have running. My version of Sql Server is 11.0.6020.0
, so I installed the 11.0.2
version of the NuGet package。这非常重要以匹配版本。
您需要 三个 个程序集。
Microsoft.SqlServer.Types.dll
msvcr<Version>.dll
SqlServerSpatial<Version>.dll
Microsoft.SqlServer.Types.dll
是一个 managed 程序集,而另外两个是 native 程序集。
如果您安装了 正确版本 的 NuGet 包,那么所有这些都应该为您处理。
安装 NuGet 包后,它会打开一个自述文件,它给出了如何使用 Loader
class.
代码示例:
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
最后,您需要覆盖 SqlProviderServices
静态 class 中的 SqlServerTypesAssemblyName
属性。 注意 这仅在更高版本的 EntityFramework 中可用。我正在使用 EntityFramework 6.1.3。在我的研究中,其他人说这在早期版本中不可用。
我再次使用版本 11.0.2
来匹配我的 Sql 服务器版本 ,所以我使用了以下代码:
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
如果您使用的是较新版本的 Sql 服务器,您应该能够将 11
替换为 12
、13
或 [=25] =] 没有问题。
如果它不起作用,这里有一个快速检查清单:
- 确保
Microsoft.SqlServer.Types.dll
被引用。 - 确保 native 程序集被复制到
..\SqlServerTypes\<Platform>\
文件夹下的 bin 目录中。应该有两个. - 确保在 任何数据库操作之前设置调用
LoadNativeAssemblies
并设置SqlServerTypesAssemblyName
,包括创建 DbContext 实例。 - 如果您的 DbContext 位于与执行程序集不同的程序集中,您可能 需要引用
Microsoft.SqlServer.Types
程序集。它可能无法通过 build/reference 过程复制。