[英]How to map Oracle database NUMBER to c# bool type in .NET Core?
我有一個包含 NUMBER 類型列的 Oracle 數據庫表。 由於遺留原因,此列表示布爾值,因此值 0 表示 false,值 -1 表示 true。
我需要將此表映射到 C# 類,從而將此列映射到具有指定映射值的 bool 屬性。 我在 .NET Core 應用程序(控制台和 asp.net)中使用 linq2db 作為 ORM。 有沒有辦法告訴 Oracle Managed Client (Oracle.ManagedDataAccess.Core) 自動為我從我的代碼執行的所有數據庫查詢執行此映射?
如果您使用 Fluent API 配置您的模型,從 EF Core 2.1 開始,您可以使用Value Conversions 。
目前沒有內置的 NumberToBool 轉換器,但可以這樣寫:
var converter = new ValueConverter<bool, int>(
v => v ? -1 : 0,
v => (v == -1));
entity.Property(e => e.IsNew)
.HasColumnName("ISNEW")
.HasConversion(converter);
Net 庫中的模型具有類。 您需要編輯或覆蓋類並在下面添加代碼
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 和“數字”類型之間的映射
// 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);
您也可能只想為標有“數字”DbType 的列配置它,因此使用配置重載,將 dbtype 作為 from/to type 參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.