实体框架C#将int转换为bool

本文关键字:转换 bool int 框架 实体 | 更新日期: 2023-09-27 18:27:50

我正在尝试用C#MVC重新编写一个VB.NET WebForms应用程序。在使用实体框架实例化类时,我遇到了一个属性问题。

我的数据库"VATNinclusive"中有一列,其类型为"int"。原始应用程序隐式地将"1"或"0"转换为"true"或"false",但当在我的应用程序中尝试这样做时,我会得到以下错误:

"Shop"上的"VATCinclusive"属性无法设置为"System.Int32"值。您必须将此属性设置为非null值类型为"System.Boolean"。

我不能像其他应用程序使用该表那样简单地更改数据库中的类型。我尝试使用以下代码转换值,但它似乎只返回false,无论数据库是"0"还是"1"。。。有人能提出解决方案吗?

    [Column("VATInclusive")]
    private int _VATInclusive { get; set; }
    [NotMapped]
    public bool VATInclusive
    {
        get
        {
            if (_VATInclusive == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        set 
        {
            if(_VATInclusive == 0)
            {
                this.VATInclusive = false;
            }
            else 
            {
                this.VATInclusive = true;
            }
        }
    } 

实体框架C#将int转换为bool

根据提供的答案中的一些建议,我已经纠正了这个问题。问题出在setter访问器和_VATIncusive属性上。通过将代码更改为以下内容,我成功地使系统按预期工作。

然而,我觉得这不是最好的方法,但它似乎是正确的。。。

EDITEDIT:我已经根据Ryan和hvd的建议减少了get访问器。。

EDIT:我不确定将两个属性都设置为public的含义。但我不认为这会成为一个问题。

    [Column("VATInclusive")]
    public int _VATInclusive { get; set; }
    [NotMapped]
    public bool VATInclusive
    {
        get
        {
            return _VATInclusive != 0;
        }
        set 
        {
            _VATInclusive = value ? 1 : 0;
        }
    }

如果将列存储为位,实体框架会自动将其查询为布尔值。

不能将setter访问器分配给它自己-这总是会导致StackOverflowException。在以下代码中:

set 
{
    if(_VATInclusive == 0)
    {
        this.VATInclusive = false;
    }
    else 
    {
        this.VATInclusive = true;
    }
}

每次都是这样。VATCinclusive分配给时,控制流返回到set访问器的开头。这显然永远无法完成。

您的setter上有一些打字错误。我想你的意思是:

set 
    {
        if(value == false)
        {
            _VATInclusive = 0;
        }
        else 
        {
            _VATInclusive = 1;
        }
    }

基本上,"value"表示传递给setter的bool值(将转换为整数)_VATNinclusive是您想要在后台修改的实际对象。

set中,您需要与value:进行比较

if (value == 0)