c# - 在 EntityFramework 6.0 和 .NET 4.5 中使用 oracle sdo_geometry

标签 c# oracle entity-framework

article声明 EF 5.0+ 和 .NET 4.5 完全支持空间类型,如 oracle sdo_geometry。但是当我尝试导入一个带有几何图形的表时,我得到了这个错误:

Data type 'sdo_geometry' not supported by .NET Framework

我已经检查过,我在我的项目编译器选项中使用的是 .NET 4.5。那我错过了什么?

最佳答案

如评论所述,ODP.NET 驱动程序当前不支持 SDO_GEOMETRY 类型。您也不能使用用户定义类型 (UDT),因为您可以在非托管驱动程序中处理几何图形。

这里有一些解决方法:

  1. 同时使用托管驱动程序和非托管驱动程序(这不是个好主意)

  2. 按照评论使用备用数据提供程序(例如 dotConnect)

  3. 使用原始 SQL 和 Oracle SDO_UTIL包裹

    // result = "POINT(30.1 - 21.9)"
    DbRawSqlQuery<string> result = 
      dbContext.Database.SqlQuery<string>("SELECT SDO_UTIL.TO_WKTGEOMETRY(COORDS) ...");
    
  4. 上述观点的变体,但使用命令拦截

    public class MyDbCommandInterceptor : IDbCommandInterceptor 
    {
      public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
      {
        if (command.CommandText.Contains("__MARKER__"))
        {
          // Do some funky text replacement
        }
      }
      ...
    }
    
    public partial class MyEntity 
    {
      [Column("__MARKER__COLUMNAME"]
      public string Coord { get; set; }
    }
    
    // Before you run the query:
    MyDbCommandInterceptor interceptor = new MyDbCommandInterceptor();
    DBInterception.Add(interceptor);
    

关于c# - 在 EntityFramework 6.0 和 .NET 4.5 中使用 oracle sdo_geometry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20838355/

相关文章:

oracle - 如何终止连接到我的 oracle 数据库的所有 session ?

c# - SQL Server 2008 中的空间数据/地理、OR 映射器和 C#

c# - 使用linq将数据从一个表复制到另一个表的最快方法

c# - 如何验证证书?

c# - 如何增加ToolTip显示时间?

c# - DbSet.Add & DbSet.Remove 与使用 EntityState.Added & EntityState.Deleted

c# - 正确使用数据上下文的 "Using"语句

c# - 为什么编译器在从方法返回字符串时会创建一条似乎什么都不做的指令?

sql - SELECT IDENT_CURRENT (‘tablename’ ) 在 Oracle 中

sql - 如何使用 join 和 where 子句从另一表中仅删除一个表中的值