如何将Oracle数据库号映射到.NET Core中的c#bool类型?

如何将Oracle数据库号映射到.NET Core中的c#bool类型?,c#,.net,database,oracle,linq2db,C#,.net,Database,Oracle,Linq2db,我有一个Oracle数据库表,列类型为NUMBER。由于传统原因,此列表示布尔值,因此值0表示false,值-1表示true 我需要将此表映射到C#类,从而使用指定的映射值将此列映射到bool属性。我在.NET核心应用程序(控制台和asp.NET)中使用linq2db作为ORM。有没有办法告诉Oracle托管客户端(Oracle.ManagedDataAccess.Core)自动为我从代码执行的所有数据库查询执行此映射?网络库中的模型具有类。您需要编辑或重写该类,并在下面添加代码 pub

我有一个Oracle数据库表,列类型为NUMBER。由于传统原因,此列表示布尔值,因此值0表示false,值-1表示true


我需要将此表映射到C#类,从而使用指定的映射值将此列映射到bool属性。我在.NET核心应用程序(控制台和asp.NET)中使用linq2db作为ORM。有没有办法告诉Oracle托管客户端(Oracle.ManagedDataAccess.Core)自动为我从代码执行的所有数据库查询执行此映射?

网络库中的模型具有类。您需要编辑或重写该类,并在下面添加代码

    public class MyTable
    {
        private Boolean myBool { get; set; }

        public int OracleNumber
        {
            get { return (myBool == false) ? 0 : -1; }
            set { myBool = (value == -1) ? myBool = true : myBool = false; }
        }
    }

您需要在映射架构中配置System.boolean和“number”类型之间的映射

// converter to query parameter
ms.SetConverter<bool, DataParameter>(val => new DataParameter { Value = <convert to number> });
// converter to query literal
ms.SetValueToSqlConverter(typeof(bool), (sb,tp,v) =>
{
    if (v is bool val) sb.Append(<number literal>);
    else               sb.Append("NULL");
});
// converter from db value to boolean
ms.SetConverter<int, bool>(val => val != 0);
//查询参数的转换器
ms.SetConverter(val=>newdataparameter{Value=});
//查询文本的转换器
ms.SetValueToSqlConverter(类型(bool),(sb,tp,v)=>
{
如果(v是bool val)sb.Append();
否则某人追加(“空”);
});
//从db值到布尔值的转换器
ms.SetConverter(val=>val!=0);

另外,您可能只想为标有“number”DbType的列配置它,所以请使用配置重载,将DbType作为from/to type参数。

如果您使用Fluent API配置模型,从EF Core 2.1开始,您可以使用

目前,NumberBool没有内置转换器,但可以这样编写:

var converter = new ValueConverter<bool, int>(
    v => v ? -1 : 0,
    v => (v == -1));

entity.Property(e => e.IsNew)
    .HasColumnName("ISNEW")
    .HasConversion(converter);
var转换器=新值转换器(
v=>v?-1:0,
v=>(v==-1));
Property(e=>e.IsNew)
.HasColumnName(“ISNEW”)
.转换(转换器);

linq2db 3.0.0-rc1计划于本周发布,它还使用值转换器增加了每列转换配置支持