2013-05-05 69 views
1

假设我有如下表:获取插入后产生的ID

public class SomeItem 
{ 
    public int Id { get; set; } 

    [DataMember(Name = "text")] 
    public string Text { get; set; } 
} 

我可以轻松地做这样的事情:

var items = await MobileService.GetTable<SomeItem>.Where(x=>x.Id > 50).ToListAsync(); 
//print items here 

,但我一直没能找到一种方式来获得插入后生成的项目。例如,我可能需要SomeItem的Id。这是想我能够做到:

var item = await MobileService.GetTable<SomeItem>.Insert(new SomeItem{Text="hi"}).Result; 
+1

为什么不只是'var newItem = new SomeItem {Text =“hi”}'然后插入'newItem'?然后你有'newItem'在那里! – 2013-05-05 09:36:20

+0

@MthetheWWatson将使用数据库自​​动创建的Id(key)填充newItem? – snotyak 2013-05-05 09:39:03

+0

不,不会 - 我以为你自己设定了身份证,但当然,我可以看到你不是。 – 2013-05-05 10:06:59

回答

2

您只需创建要单独插入,让你有一个参考它,你可以在插入后使用的项目:

var newItem = new SomeItem{Text="hi"}; 
await MobileService.GetTable<SomeItem>.Insert(newItem); // Or whatever syntax you need here! 
// Now you can use newItem after it's been inserted (and the 'Id' key has been updated by the insert) 
+0

谢谢。我真的很惊讶,当这个工作... – snotyak 2013-05-05 10:44:35

+0

(不要告诉任何人......但我也是;) – 2013-05-05 10:45:45

0

(当前)测试版客户端SDK中存在突破性更改。查看详情这个帖子:

http://blogs.msdn.com/b/carlosfigueira/archive/2013/03/14/azure-mobile-services-managed-client-upcoming-breaking-changes.aspx

在你的答案提供的代码,因为“SomeItem”是一个已知的数据类型,我觉得行为将保持不变并且对象将在修补地点。如果您使用的是未键入的数据(JSON),则该对象将不会打补丁。你必须依赖返回的对象来检查id的值。卡洛斯在上面的帖子中更详细地解释了这一点。

Nate