我不确定这是OData
问题,WCF
,EF
还是什么问题;我是新手,这些线仍然模糊不清。
我一直在尝试使用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,因此这似乎是客户端映射问题。是否有可能使这种行为起作用?
答案 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);