【发布时间】:2021-03-03 09:11:29
【问题描述】:
使用 Visual Studio C# .NET 中的 odata-v4 服务连接,我得到了一个 testDefinition 类型的实体。 testDefinition 具有名为 features 的属性,它是 feature 类型的实体的集合。
在 DB 中,testDefinition 到 feature 是多对多的,带有一个联结表。
在我的代码中,我将服务引用添加到为数据库的 EDMX 提供服务的 Web 服务。
代码生成正确,我运行:
var dsc = new Container(new Uri("http://webserver/webapi/odata/"));
var someFeature = new Feature
{
name = $"Sample feature created with C# {DateTime.UtcNow}",
};
var someOtherFeature = new Feature
{
name = $"Sample other feature created with C# {DateTime.UtcNow}",
};
dsc.AddToFeature(someFeature);
dsc.AddToFeature(someOtherFeature);
dsc.SaveChanges();
var someTestDefinition = new TestDefinition
{
name = $"Sample test created with C# {DateTime.UtcNow}",
description = $"A nice succinct description",
};
dsc.AddToTestDefinition(someTestDefinition);
dsc.SaveChanges();
someTestDefinition.features.Add(someFeature);
someTestDefinition.features.Add(someOtherFeature);
dsc.SaveChanges();
问题是从测试定义到特征的映射没有记录在数据库中。
有没有人遇到过这个问题,或者更好的是,解决了它?
供参考:
【问题讨论】:
-
服务器是什么?如果您在服务器上使用 Microsoft 的 OData WebAPI,它不支持请求正文中的 odata.bind,即使 Microsoft 的 OData 客户端会生成带有 odata.bind 指令的请求 (github.com/OData/WebApi/issues/158),我建议拦截请求JSON body 发送到服务器查看。可以在服务器端实现您自己对 odata.bind 的支持(我在自己的一个项目中做过),但这很有挑战性。
-
这是 MS WebApi - 感谢您提供的信息。您应该将其添加为答案。
-
我实际上会添加我的解决方案来实现 odata.bind 作为答案,但可能需要一两天,您使用的是什么版本的 OData WebAPI(该解决方案使用了一些库'内部结构在最近的版本中发生了很大变化)?
-
不确定 - 现在我的项目中有很多对 ODATA 的引用,我有点困惑。我正在将我的 odata 引用的屏幕截图添加到问题的正文中。谢谢。
-
我删除了 Microsoft.Data.OData 引用。这适用于 v3,不需要。
标签: c# entity-framework-6 odata odata-v4