使用oracle sdo_geometry与EntityFramework 6.0和.NET 4.5

时间:2013-12-30 11:13:43

标签: 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。那我错过了什么?

1 个答案:

答案 0 :(得分:1)

如评论所述,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);