2010-04-09 49 views
4

我正在尝试更新Azure表存储中的条目。功能是:尝试更新Azure表存储时出现“请求输入无效”之一错误

public void SaveBug(DaBug bug) 
     { 
      bug.PartitionKey = "bugs"; 
      bug.Timestamp = DateTime.UtcNow; 

      if (bug.RowKey == null || bug.RowKey == string.Empty) 
      { 
       bug.RowKey = Guid.NewGuid().ToString(); 

       _context.AddObject(c_TableName, bug); 
      } 
      else 
      { 
       _context.AttachTo(c_TableName, bug); 
       _context.UpdateObject(bug); 
      } 

      _context.SaveChanges(); 
     } 

如果它是一个新的条目(“bug.RowKey == null”路径),那么它工作正常。如果它是对现有实体的更新,那么“AttachTo”和“UpdateObject”调用工作,但是当它到达“SaveChanges”时,它会抛出“其中一个请求输入无效”异常。

正在被存储的类是:

[DataContract] 
[DataServiceKey("RowKey")] 
public class DaBug 
{ 
    [DataMember] 
    public bool IsOpen { get; set; } 
    [DataMember] 
    public string Title { get; set; } 
    [DataMember] 
    public string Description { get; set; } 
    [DataMember] 
    public string SubmittedBy { get; set; } 
    [DataMember] 
    public DateTime SubmittedDate { get; set; } 
    [DataMember] 
    public string RowKey { get; set; } 

    public DateTime Timestamp { get; set; } 
    public string PartitionKey { get; set; } 
} 

有谁知道问题是什么?

感谢您的任何帮助。

+0

Timestamp属性应该在服务器端填充,不确定您的客户端代码是否具有DateTime.Now功能。 – 2010-04-09 20:38:22

回答

6

如果有人正在寻找的答案:

http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/0c9d476e-7970-422a-8b34-e987e41734df


通过表方面的工作,我不得不调用从改变:

_context.AttachTo(c_TableName, bug); 

到:

_context.AttachTo(c_TableName, bug, "*"); 
+0

谢谢你在我没有头发留下拔出之前挽救我。我继续并将实际答案复制到自己的答案中。 – roufamatic 2010-08-09 18:24:00

+2

当我访问MSDN链接时,页面返回“未授权”错误。你能提供另一个链接或更详细的解释为什么这种解决方法是必要的吗? – James 2012-08-17 01:55:35

+0

这对我们有效(解决方案不是链接) – 2013-06-24 08:32:59

2

如果您错误地将RowKey设置为您已使用的值(而不是您在问题中使用代码时会遇到此问题),那么也可能会出现此错误。我试图一次推送50多个实体,并且意外地将RowKey设置为两个实体的相同值。

相关问题