【问题标题】:How to make MySql and EF Core to map tinyint or bit to boolean?如何使 MySql 和 EF Core 将 tinyint 或 bit 映射为布尔值?
【发布时间】:2020-04-21 22:52:26
【问题描述】:
我有一个 .NET Core 项目,我在其中使用 EF Core 搭建 MySql 数据库(db first 方法)。我无法让 EF Core 将 tinyint 或 bit 映射为 bool。它将 tinyint 映射到 byte 并将 bit 映射到 short。有人有什么想法吗?
【问题讨论】:
标签:
c#
mysql
.net-core
entity-framework-core
【解决方案1】:
确保您使用 Pomelo.EntityFrameworkCore.MySql 作为您的 MySQL EF Core 提供程序。 (已经支持EF Core 3.0,比Oracle的包更可靠。)
从 3.0 开始,将 TINYINT(1) 映射到 System.Boolean 是默认设置 (reference),只要您的连接字符串包含 TreatTinyAsBoolean=True(如果未明确设置,这是默认设置)。
【解决方案2】:
您可以为从实体框架生成的部分类编写元类。
假设你有一个像下面这样的类调用状态
public class Status{
public int Value{get;set;}
}
你可以像下面这样为它编写元类。
[ModelMetadataType(typeof(TblUserMetaData))]
public partial class Status
{
}
public class TblUserMetaData
{
public int Value{get;set;}
public bool ValueBool{get{
//gett Value variable by converting boolean
};
set{
//set Value variable by converting int
};
}
}
}