【发布时间】:2017-03-16 09:25:50
【问题描述】:
我是从 Odata 开始的新手,我已经为以下实体定义了 Odata Api:
[Table("clients", Schema = "dbo")]
public class Client
{
public int Id { get; set; }
[Required]
public String Name { get; set; }
}
[Table("orders", Schema = "dbo")]
public class Order
{
public int Id { get; set; }
public DateTimeOffset Date { get; set; } = DateTimeOffset.Now;
[Required]
public virtual Client Client { get; set; }
public String Comment { get; set; }
}
Client 实体中的 Name 和 Order 实体中的 Navigation Property 被注释为“必需”,因为我使用 Attribute Routing Api 来验证控制器中的模型。
当为 ID 为 1(数据库中已存在)的客户发布(插入)新订单时,我将正文中包含以下 json 对象的发布请求发送到我的 Odata 端点:
{
"Date": "2017-03-16T08:28:47.700Z",
"Client": {
"Id": 1
},
"Comment": "Something"
}
我收到以下错误消息:
{
"error": {
"code": "",
"message": "The request is invalid.",
"innererror": {
"message": "Order.Client.Name : Das Feld \"Name\" ist erforderlich.\r\n",
"type": "",
"stacktrace": ""
}
}
}
翻译成英文,表示实体Client的Field名称是必填项。
第一个问题:如何使用 Odata 发布/插入具有导航属性 (fk) 的实体,而无需在发布请求中发送表示导航属性的完整对象以及所有字段?难道不能只发送导航属性的 id / 主键吗?
如果我在请求中发送了用作导航属性的完整实体,则在数据库中创建了订单,但是发生了一件奇怪的事情:导航属性“客户端”被忽略了,一个新的同名客户端为这个插入的实体创建...
我的意思是,订单是在表中创建的,但订单的 client_id 不是 1,因为使用提供的名称创建了一个新客户端。但是id被忽略了...
我做错了什么?
提前致谢。
【问题讨论】:
标签: c# post foreign-keys odata