对象的属性设置为零

时间:2014-08-05 12:33:34

标签: c# asp.net web-services

我创建了一个属性为competitionId的对象。在处理程序中,我调用接受此对象的webservice中的方法。我在调用方法的行上放置了一个断点并检查了该对象,它将此competitionId属性设置为21.但它抛出的错误是competitionId不能为0.

当我通过测试客户端为webservice传递相同的值时,值将被插入到数据库中。这里除了competitionId之外,所有其他属性都正确传递。 competitionId的数据类型为int

以下是错误消息

  

发生数据库错误。请联系管理员了解更多详情。     ErrorNumber = 547,ErrorSeverity = 16,ErrorState = 0,ErrorLine = 23

     

ErrorMessage = INSERT语句与FOREIGN KEY约束“FK_CCS_VAS_tbl_ProblemStatement_CCS”冲突。冲突发生在数据库“DBNAME”,表“dbo.CCS_VAS_tbl_Competition”,列'iCompetitionId'。

如果我通过测试客户端传递相同的值,它会成功插入! 对象没有正确传递? competitionId是否设置为默认值0?我检查了传递的对象,它对competitionId有一些价值。 可能是什么问题?

其他信息:

Reference.cs

中生成了一个字段
[System.Xml.Serialization.XmlIgnoreAttribute()] 
public bool CompetitionIdSpecified
{
    get
    { 
        return this.competitionIdFieldSpecified; 
    }

    set
    { 
        this.competitionIdFieldSpecified = value; 
        this.RaisePropertyChanged("CompetitionIdSpecified"); 
    } 
} 

/// <remarks/>

如果我在Reference.cs中对此进行评论,其工作正常!但我无法遵循这种方法,因为我必须在每次更新服务后手动更新reference.cs并且不可维护。

1 个答案:

答案 0 :(得分:0)

我找到了原因。

正在生成一个名为Specified的属性,如果未设置为true,则会将CompetitionId属性设置为0

这个有两个解决方案

  1. 设置object.Specified=true;,使值不会设置为0
  2. 在数据成员中设置[DataMember(IsRequired = true)],以便在添加service reference
  3. 时不会创建Specified属性

    我使用了第二种解决方案,它对我来说很好用

    我从this question

    找到了这个解决方案