转换Oracle数据库中的对象模型

时间:2018-10-26 01:05:53

标签: c# oracle

我有一个类似以下的模型

[Table("SERVICE_REFERENCE", Schema = "SCHEMAOWNER")]
public class ServiceReferenceModel
{
    [Key]
    [Column("SERVICE_ID", TypeName="Guid")]
    public Guid ServiceID { get; set; }

    [Column("SERVICE_NAME")]
    public string ServiceName { get; set; }
}

基于如下所示的Oracle数据库中的表

CREATE TABLE "SCHEMAOWNER"."SERVICE_REFERENCE" (
    "SERVICE_ID" RAW(16) DEFAULT SYS_GUID() NOT NULL ENABLE, 
    "SERVICE_NAME" VARCHAR2(30 BYTE) NOT NULL ENABLE,
    CONSTRAINT "SERVICE_REFERENCE_PK" PRIMARY KEY ("SERVICE_ID")
    ...
)

对于执行基本查询,通过Entity Framework使用基于LINQ的直接查询就可以了。但是,我有一个视图模型,该视图模型使用来自ServiceReferenceModel的属性,该属性使用原始SQL查询,因为基于LINQ的查询存在局限性。

为了进行这些原始查询,我遵循了question的第一个答案的建议,并制作了Oracle的EntityFrameworkExtensions类。

对于大多数查询来说,这都可以正常工作,但是任何与Guid类型相关的问题,我都会遇到强制转换错误

  

从实例化的“ System.Byte []”类型到“ System.Guid”类型的指定强制转换无效。

,捕获的代码在ObjectContext.Translate行:

using (var result = ((IObjectContextAdapter)db).ObjectContext.Translate<T>(reader))

我了解发生了什么事。 Translate方法无法将我的原始数据从Oracle(因为Oracle没有GUID类型)转换为.NET GUID类型。如果我将字段转换为byte[]类型,然后运行它,它就可以正常工作,但是当我进行更改时,这会影响到写回数据库的工作。

在进入Translate函数之前,有什么方法可以截获数据并手动对GUID操作执行任何byte []吗?

0 个答案:

没有答案