【问题标题】:.net odata client creating entity relationship.net odata 客户端创建实体关系
【发布时间】:2016-01-30 11:29:50
【问题描述】:

在 .Net 中使用 OData v4,我有两个类,似乎无法将它们之间的实体关系存储在数据库中。

public class Customer
{
   int Id {get;set;}
   ...
}
public class Order
{
    int Id {get;set;}
    public virtual Customer customer {get;set;}
   ...
}

WebApiConfig.cs
    builder.EntitySet<Order>("Orders");
    builder.EntityType<Order>().ContainsRequired(o => o.Customer);
    builder.EntitySet<Customer>("Customers";

And my inline code looks like:
    var cust = new Customer(...);
    var order = new Order(...);
    container.AddToOrders(order);
    container.SetLink(order,"Customer", cust);
    container.SaveChanges();

我没有收到任何错误,但是当我调试控制器时,订单对象中的客户对象为空。如果在控制器中我重置了订单对象中的客户对象,则数据将正确存储。所以看起来实体框架部分工作正常,只是无法让 OData 客户端序列化 Order 对象中的入站 Customer 对象。

对于我所缺少的东西(来自客户端)的任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 我已经看到了,这一切似乎从服务器到客户端都可以工作。我的问题似乎是从客户端到服务器,就像我需要扩展对 Order 对象(或类似的东西)的 Add 请求。我通过使用控制器中的 .Include() 在服务器上获得了我需要的行为。在添加包含实体对象的对象时,我似乎只是缺少客户端上触发相反行为的部分。有意义吗?

标签: c# .net entity-framework odata


【解决方案1】:

解决了这个问题。回去重读教程,发现我缺少什么。类中的 [ForeignKey("")] 修饰和正确使用 SetLink 方法的组合。我的错误是尝试添加实体并在同一个保存操作中创建链接。一旦我创建了实体,保存它,然后执行 SetLink() 并保存它,我在数据库中就有了关系。完成此操作后,只需将 .Expand() 添加到我的查询中,或者使用 LoadProperty() 加载关系即可。

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2014-10-13
    • 2021-02-09
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多