被设置为零的对象的属性

本文关键字:对象 属性 设置 | 更新日期: 2023-09-27 18:16:33

我创建了属性为competitionId的对象。在处理程序中,我调用了接受该对象的web服务中的一个方法。我在调用方法并检查对象的行上放置了一个断点,它有这个competitionId属性为21。但它抛出了一个错误,说competitionId不能为0。

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

下面是错误信息

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

ErrorMessage= INSERT语句与外键约束"FK_CCS_VAS_tbl_ProblemStatement_CCS"冲突。冲突发生在数据库"DBNAME",表"dbo "。CCS_VAS_tbl_Competition",列' iccompetitionid '.

如果我通过测试客户端传递相同的值,它将成功插入!对象没有正确传递吗?是否将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,而且它不可维护。

被设置为零的对象的属性

我查出原因了。

它正在生成一个名为Specified的属性,当不设置为true时,将CompetitionId属性设置为0

这个

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

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

我从这个问题中找到了答案