C# 需要以C字符串数据类型“原样”获取Oracle原始数据

C# 需要以C字符串数据类型“原样”获取Oracle原始数据,c#,oracle,entity-framework-6,C#,Oracle,Entity Framework 6,帮我一个忙,要求是我需要在C中使用与字符串相同的Oracle RAW值。我可以将字符串保存为oracle表中的原始值,但在获取字符串时,它会 异常对象必须实现IConvertible 我可以理解,由于原始数据类型未映射到任何主数据类型,所以编译器会给出此异常,但我如何实现这一点 我使用EF6代码优先的方法,在后端我使用Oracle 12C 下面是示例代码 public partial class EF6TEST { [Key] [Column(Order = 0)] //

帮我一个忙,要求是我需要在C中使用与字符串相同的Oracle RAW值。我可以将字符串保存为oracle表中的原始值,但在获取字符串时,它会 异常对象必须实现IConvertible

我可以理解,由于原始数据类型未映射到任何主数据类型,所以编译器会给出此异常,但我如何实现这一点

我使用EF6代码优先的方法,在后端我使用Oracle 12C

下面是示例代码

 public partial class EF6TEST
{
    [Key]
    [Column(Order = 0)]
   // [MaxLength(32)]
    public string ID { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(50)]
    public string NAME { get; set; }
}
 public class BE
{
    public string id;
    public string name;
}


class Program
{
    static void Main(string[] args)
    {
        List<BE> be;
        try
        {
            using (var context = new Model1())
            {
                #region insert
                context.EF6TEST.Add(new EF6TEST()
                {
                    ID = "96A8B17B17FB464B886146A28399E7E2",
                    NAME = "NewRAM"
                });
                #endregion
                context.SaveChanges();

                #region fetch
                be = (from t in context.EF6TEST
                      select new BE
                      {
                          id = t.ID,
                          name = t.NAME
                      }).ToList<BE>();


                #endregion                                       

            }
            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception found");
        }
    }
原始数据类型如下所示:

RAW和LONG RAW数据类型用于Oracle数据库在不同系统之间移动数据时不进行解释或转换的数据。这些数据类型用于二进制数据或字节字符串

换句话说,字节[]的映射比字符串更好。转换为字符串需要应用编码


我建议您尝试将列映射到byte[],然后在.NET中使用适当的编码将其转换为字符串。e、 g.Encoding.UTF8.GetStringbytes.

编译器不提供异常-异常发生在执行时,而不是编译时。请澄清何时出现错误。很抱歉误解这是运行时错误。我也尝试将Id转换为byte[],并在context.EF6TEST select t.Id.ToList中使用var be1=from t t;var be2=System.Text.Encoding.ASCII.GetStringbe1.FirstOrDefaul;但这会产生不同的字符串集,使用默认编码、ASCII、Unicode,但每次都会产生一组衍射字符。@VSharma:那么数据是什么?它是从哪里来的?它实际上是文本数据吗?如果您先看到代码,我会在ID字段中添加一个字符串96A8B17FB464B886146A28399E7E2,该字符串保存在oracle原始数据类型列字段中。接下来我试着去拿同样的value@VSharma:但是您看到返回的字节是什么?基本上,您也不应该将其保存为字符串-我建议在直接与RAW交互的任何地方都使用byte[]。非常满意,所以将其作为答案。