[英]Entity Framework C# convert int to bool
我试图在C#MVC中重写一个VB.NET WebForms应用程序。 使用Entity Framework实例化类时,我遇到了其中一个属性的问题。
我的数据库“VATInclusive”中有一列,类型为'int'。 原始应用程序隐式将“1”或“0”转换为“true”或“false”,但在我的应用程序中尝试执行此操作时,出现以下错误:
'Shop'上的'VATInclusive'属性无法设置为'System.Int32'值。 必须将此属性设置为类型为“System.Boolean”的非null值。
我不能简单地更改数据库中的类型,因为其他应用程序使用该表。 我已经尝试使用以下代码转换值,但它似乎只返回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;
}
}
}
根据所提供答案的一些建议,我已经纠正了这个问题。 问题在于setter访问器以及_VATIncusive属性。 通过将代码更改为以下代码,我设法使系统按预期工作。
但是,我觉得这不是最好的方法,但似乎工作正常......
编辑 : 编辑 :根据Ryan和hvd的建议,我减少了获取访问器。
编辑 :我不确定将这两个属性设置为公开的含义。 但我不认为这会成为一个问题。
[Column("VATInclusive")]
public int _VATInclusive { get; set; }
[NotMapped]
public bool VATInclusive
{
get
{
return _VATInclusive != 0;
}
set
{
_VATInclusive = value ? 1 : 0;
}
}
如果将列存储为位,Entity Framework会自动将其作为布尔值查询。
你的二传手上有一些拼写错误。 我认为你的意思是:
set
{
if(value == false)
{
_VATInclusive = 0;
}
else
{
_VATInclusive = 1;
}
}
基本上,“value”表示传入setter的bool值(转换为整数)。 _VATInclusive是您想要在引擎盖下修改的实际对象。
您不能将setter访问器分配给自身 - 这将始终导致StackOverflowException。 在以下代码中:
set
{
if(_VATInclusive == 0)
{
this.VATInclusive = false;
}
else
{
this.VATInclusive = true;
}
}
每次分配this.VATInclusive时,控制流程返回到set访问器的开头。 这显然永远无法完成。
在您的set
,您需要与value
进行比较:
if (value == 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.