oracle mdsys.Vertex_set_type自定义映射c#

本文关键字:自定义 映射 type set mdsys Vertex oracle | 更新日期: 2023-09-27 18:07:32

我正在开发一个与oracle数据库一起工作的c#应用程序。我正在使用oracle。dataaccess提供者。但是当我尝试运行这个查询:

select sdo_util.getVertices(sdo_geom.sdo_intersection(geo1,geo2,0.005))
from geotable1
where sdo_anyinteract(geo1,geo2) = 'TRUE' and id1 = 59

ID号仅为举例。这个查询的结果是每个Oracle规范MDSYS。VERTEX_SET_TYPE,它由一个VERTEX_TYPE类型的对象表组成。

这是第一个问题。当我试图运行这个查询oracle。数据访问提供商,我得到错误"自定义类型映射为'数据源='…' schemaName='MDSYS' typeName='VERTEX_SET_TYPE'未指定或无效。我已经搜索了解决方案,应该实现这个自定义映射,但没有成功。

所以我试图实现这个由我自己。这是代码:

[OracleCustomTypeMappingAttribute("MDSYS.VERTEX_SET_TYPE")]
public class VertexSetType : OracleCustomTypeBase<VertexSetType>
{
    private enum OracleObjectColumns { VERTEX_TYPE }
    private List<VertexType> vertexType;
    [OracleObjectMappingAttribute(0)]
    public List<VertexType> VertexType
    {
        get { return vertexType; }
        set { vertexType = value; }
    }
    public override void MapFromCustomObject()
    {
        SetValue((int)OracleObjectColumns.VERTEX_TYPE, VertexType);
    }
    public override void MapToCustomObject()
    {
        VertexType = GetValue<List<VertexType>>((int)OracleObjectColumns.VERTEX_TYPE);
    }
}

VertexType我已经定义为:

[OracleCustomTypeMappingAttribute("MDSYS.VERTEX_TYPE")]
public class VertexType : OracleCustomTypeBase<VertexType>
{
    private enum OracleObjectColumns { X, Y, Z, W, ID }
    private decimal? x;
    [OracleObjectMappingAttribute(0)]
    public decimal? X
    {
        get { return x; }
        set { x = value; }
    }
    private decimal? y;
    [OracleObjectMappingAttribute(0)]
    public decimal? Y
    {
        get { return y; }
        set { y = value; }
    }
    private decimal? z;
    [OracleObjectMappingAttribute(0)]
    public decimal? Z
    {
        get { return z; }
        set { z = value; }
    }
    private decimal? w;
    [OracleObjectMappingAttribute(0)]
    public decimal? W
    {
        get { return w; }
        set { w = value; }
    }
    private decimal? id;
    [OracleObjectMappingAttribute(0)]
    public decimal? Id
    {
        get { return id; }
        set { id = value; }
    }
    public override void MapFromCustomObject()
    {
        SetValue((int)OracleObjectColumns.X, x);
        SetValue((int)OracleObjectColumns.Y, y);
        SetValue((int)OracleObjectColumns.Z, z);
        SetValue((int)OracleObjectColumns.W, w);
        SetValue((int)OracleObjectColumns.ID, id);
    }
    public override void MapToCustomObject()
    {
        X = GetValue<decimal?>((int)OracleObjectColumns.X);
        Y = GetValue<decimal?>((int)OracleObjectColumns.Y);
        Z = GetValue<decimal?>((int)OracleObjectColumns.Z);
        W = GetValue<decimal?>((int)OracleObjectColumns.W);
        Id = GetValue<decimal?>((int)OracleObjectColumns.ID);
    }
}

但是当我再次运行查询时,我得到错误:

无法强制转换"空间"类型的对象。VertexSetType'到类型"Oracle.DataAccess.Types.IOracleArrayTypeFactory"。

由于oracle数据类型的c#自定义映射非常少,我无法从这种情况中前进。所以,如果有人能帮忙,我会很感激的。谢谢。

oracle mdsys.Vertex_set_type自定义映射c#

没关系,我已经修好了。MDSYS。VERTEX_SET_TYPE应该定义为包含VertexType对象的简单Oracle数组。

[OracleCustomTypeMappingAttribute("MDSYS.VERTEX_SET_TYPE")]
public class VertexSetType : OracleArrayTypeFactoryBase<VertexType> { }