【问题标题】:Error inserting guid as primary key in object get set在对象设置中插入 guid 作为主键时出错
【发布时间】:2018-10-04 08:07:32
【问题描述】:

试图在objectgetset中插入GUID作为主键。在set 部分,我检查了value==null 以确定insert 还是update

 public string Id
    {
        get
        {
            return this.Id;
        }
        set
        {
            try
            {
                this.Id = value == null ? this.Id = Guid.NewGuid().ToString("D") : value;
            }
            catch (Exception ex) {
                throw ex;
            }
        }
    }

【问题讨论】:

  • this.Id = value == null ? Guid.NewGuid().ToString("D") : value; 你不需要第二个this.Id =
  • 您有一个属性Id 和一个支持字段Id?这可能是合法的,但我质疑可读性,您可能想要重命名支持字段。此外,您的验证逻辑存在(或可能存在,取决于您的要求)有缺陷,它会检查空字符串,但不检查非空字符串是否对您的用例有效。
  • @Loocid 我的错。谢谢
  • @dumetrulo 指出,将进行更改。谢谢

标签: c# object primary-key guid


【解决方案1】:

您不能在集合中使用属性或获取...这将是一个无限循环。 您使用该属性作为支持字段。

只需定义一个支持字段即可。

private string id;
public string Id
    {
        get
        {
            return this.id;
        }
        set
        {
            try
            {
                this.id = value == null ? Guid.NewGuid().ToString("D") : value;
            }
            catch (Exception ex) {
                throw ex;
            }
        }
    }
}

另外,请注意,就像@Loocid 评论的那样 - 如果您更改为支持字段,您的代码将起作用,但不需要第二个 this.id =

【讨论】:

    【解决方案2】:

    问题来自我要说的get,当您尝试访问Id 的值时,您似乎正在返回Id,因此它将最终进入无限循环并导致System.StackOverflowException

    编辑

    您也可以使用?? 运算符来检查空值

    例子

    public string Id
    {
        get
        {
            return this.Id;
        }
        set
        {
            try
            {
                this.Id = value ?? Guid.NewGuid().ToString("D");
            }
            catch (Exception ex) {
                throw ex;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      相关资源
      最近更新 更多