可以使用相关实体(而不是相关ID)创建一个具有OData的实体吗?

时间:2014-03-19 16:26:18

标签: c# .net entity-framework odata wcf-data-services

我不确定这是OData问题,WCFEF还是什么问题;我是新手,这些线仍然模糊不清。

我一直在尝试使用C#MVC .NET应用程序中的OData服务创建一些实体。通过使用相关实体的ID来实现它似乎工作正常,例如:

Container c = getContainer();
Foo f = new Foo();
f.Name = "blah";
f.ThingId = 7;
c.AddToFoos(f);
c.SaveChanges();

但是,直接使用相关实体不起作用。这在使用本地SQL数据库时对我有用,但对OData服务没有用。 E.g:

Container c = getContainer();
Foo f = new Foo();
Thing t = c.Things.Where(v => v.id==7).FirstOrDefault();
f.Name = "blah";
f.Thing = t;
c.AddToFoos(f); // or Attach(f)
c.SaveChanges();

此外,使用SetLink也无效。在所有失败情况下,请求中的Id都设置为0。在SetLink案例中,它有一个@odata.bind参数。

由于请求中的ID为0,因此这似乎是客户端映射问题。是否有可能使这种行为起作用?

1 个答案:

答案 0 :(得分:0)

这与名为Batch的功能有关。您可以尝试这样的代码:

Container c = getContainer();
Foo f = new Foo();
f.Name = "blah";
c.AddToFoos(f); 

Thing t = c.Things.Where(v => v.id==7).FirstOrDefault();
c.AddLink(f, "Thing", t); // Thing is the Navigation property name from f to t.

c.SaveChanges(SaveChangesOptions.BatchWithSingleChangeset);