有人告诉我在我的家庭作业项目中将Microsoft.SqlServer.Types
用于DbGeography
。家庭作业项目使用ASP.NET,并且正在尝试使用数据库对db中的内容进行搜索。 (该数据库应该来自一个.bak
文件,但是我不得不将一个.bacpac
文件上传到azure中,然后再连接回它,因为.bak
文件一直说它已损坏)
这是我被告知放入Global.asax.cs
文件中的代码块:
protected void Application_Start()
{
// For Spatial types, i.e. DbGeography
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
// This next line is a fix that came from: https://stackoverflow.com/questions/13174197/microsoft-sqlserver-types-version-10-or-higher-could-not-be-found-on-azure/40166192#40166192
SqlProviderServices.SqlServerTypesAssemblyName = typeof (SqlGeography).Assembly.FullName;
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
我已经看过documentation,但奇怪的是:
Microsoft.SqlServer.Types
允许您在未安装SQL Server的计算机上使用SQL Server空间类型。允许使用实体框架空间类型(DbGeography和DbGeometry)。
我认为只是意味着该软件包使我们能够将c表达式用于SQL,但我想要一个更好的解释。我不知道DbGeography
和DbGeometry
的工作。
此外,我想知道这是否适用于基于azure的数据库,而不仅是由.bak文件制成的本地数据库。
答案 0 :(得分:2)
我不知道DbGeography和DbGeometry做什么。
很简单。 SQL Server具有spatial types。 .NET没有。
Microsoft.SqlServer.Types
是一个库,您可以将其添加到.NET项目中,以与.NET项目中的SQL Server geography
和geometry
数据类型一起使用。没有此库,您只能通过将SQL Server空间类型转换为WKT格式的文本来读取和写入SQL Server空间类型。
对于SQL Server支持的大多数其他数据类型,有一个对应的.NET类型可以工作。例如,SQL Server具有int
,. NET具有System.Int32
,等等。