我有一个WCF服务(服务)。服务管理数据。但是现在我通过在LINQ查询中选择数据来解决问题。我收到一条消息“无法将null值分配给System.Int32类型的成员,该类型是非可空值类型。”
通过第一次调试方法,我将完成异常行。当我将调试器行(黄色标记为一行)放回“// 08”行时,然后我逐步完成该方法一切正常。
private static ResultClass Geselecteerd(int AID_Artiest) // 01
{ // 02
ResultClass _Result = new ResultClass(); // 03
string sMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;// 04
// 05
try // 06
{ // 07
var recArtiest = (from artiest in DatabaseControl.GetDatabeheer.DataContext.ARTIESTs // 08
where artiest.ID_ARTIEST == AID_Artiest
select artiest).SingleOrDefault();
if (recArtiest != null)
{
ArtiestDataType.ID_Artiest = recArtiest.ID_ARTIEST;
ArtiestDataType.Artiestnaam = recArtiest.ARTIESTNAAM;
ArtiestDataType.Voorvoegsel = recArtiest.VOORVOEGSEL;
ArtiestDataType.Product = recArtiest.PRODUCT;
ArtiestDataType.ID_Categorie = recArtiest.ID_CATEGORIE;
ArtiestDataType.ID_Genre = recArtiest.ID_GENRE;
ArtiestDataType.Is_Band = BasisDataType.GetBoolString(recArtiest.IS_BAND);
ArtiestDataType.Land = recArtiest.LAND;
ArtiestDataType.Plaats = recArtiest.PLAATS;
ArtiestDataType.Website = recArtiest.WEBSITE;
ArtiestDataType.DatumInvoer = recArtiest.DATUM_INVOER;
ArtiestDataType.DatumMutatie = recArtiest.DATUM_MUTATIE;
}
}
catch (Exception ex)
{
string sFoutmelding = "Kan geen selectie maken.";
FLogboek.AddFoutmelding(FClassName, sMethodName, sFoutmelding, ex.Message);
_Result.Code = ResultCode.FATAAL;
_Result.Melding = sFoutmelding;
}
return _Result;
}
ID_ARTIEST是一个整数字段,它也是一个主键。字段的值是必需的,并且无法使用NULL值。
此方法始终有效。当我添加新服务时,问题就开始了。
我的问题是:我错了什么?有与服务有关吗? 我是否必须推迟这个过程? 有人可以给我一些提示吗?我有8个服务参考。如果您遗漏了一些重要来源,我可以添加它。
我现在只有一个解决方法。 我在try-catch区域添加了try-catch。然后我没有得到任何例外。它与性能有关。 我是否需要异步解决方案?
感谢。
答案 0 :(得分:5)
几乎可以肯定的是,ARTIESTs
中DatabaseControl.GetDatabeheer.DataContext.ARTIESTs
类型的属性之一属于int?
类型(这意味着可以为空的整数)。
猜测我会说它是ID_CATEGORIE
或ID_GENRE
。
您需要修改类型ArtiestDataType
的等效属性,使其也属于int?
类型。
这将解决您的问题。
答案 1 :(得分:2)
更改
where artiest.ID_ARTIEST == AID_Artiest
到
where artiest.ID_ARTIEST.HasValue && artiest.ID_ARTIEST.Value == AID_Artiest
您的一位或多位艺术家没有ID_ARTIEST
集合(您应该修复它,它看起来确实应该始终存在的主键),因此在比较(int?)null == int
异常时扔了。
答案 2 :(得分:0)
将变量/ property声明为nullable int
public int? myInt
答案 3 :(得分:0)
我有同样的问题,我在表格设计中忽略了重复的列。
在提交时插入,插入后将返回表格行。但是由于重复,这里的行被忽略了,它没有返回具有标识值的表行(它不可为空)。
因此预期值不存在,它将抛出“不可为空的例外”。
在插入检查之前,该行基于ignore duplicate列存在。它将解决问题
答案 4 :(得分:-2)
在我的情况下,ID是一个INT64,修复它的方法是使用ToString()
.....
group t2 by t1 into gr
select new {t1 = gr.Key, id = gr.First().ID.ToString()}