2016-01-18 2 views
0

Используя OData v4 в .NET, у меня есть два класса и, похоже, не могу получить связь между сущностью между ними для хранения в БД..net odata client create entity relationship

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 сериализовать входящий объект Customer в объекте Order.

Любая помощь по поводу того, что мне не хватает (со стороны клиента), была бы весьма признательна.

Спасибо.

+0

см. Http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/using-select-expand-and-value. => «$ expand» –

+0

Я видел, что все это работает с сервера на клиент. Моя проблема связана с клиентом на сервере, так как мне нужно расширить свой запрос Add для объекта Order (или что-то в этом роде). Я получил поведение, которое мне было необходимо на сервере, используя .Include() в контроллере. Мне просто кажется, что на клиенте отсутствует кусок, который вызывает противоположное поведение при добавлении объекта с содержащимся объектом объекта. Имеют смысл? –

ответ

0

Получил это разрешение. Вернулся и перечитал учебник и нашел то, чего не хватало. Комбинация [ForeignKey ("")] украшения в классе и правильное использование метода SetLink. Моя ошибка заключалась в попытке добавить объект и создать ссылку в том же действии Save. Как только я создал объект, сохранил его, затем сделал SetLink() и сохранил его, у меня были отношения в БД. Как только это было сделано, было просто добавить либо .Expand() в мой запрос, либо использовать LoadProperty(), чтобы загрузить отношения.