Как объединить 2 объекта в конструкторе моделей Odata

В настоящее время я использую OData V4 и хочу присоединиться к двум таблицам Account и Product:

Таблицы следующие: Account: Id, Name, Address, ColorCode,

Продукт: Id, AccountId

AccountId в таблице Product - это внешний ключ, сопоставленный с полем Id в таблице Account.

У меня в строителе есть:

var ProductType= builder.EntityType<Product>();

Когда я создаю сущность Product, я хочу получить значения "ColorCode" от сущности Account.

Как я могу установить эти отношения в конструкторе моделей?

Я хотел бы, чтобы класс продукта выглядел так:

public  class Product
{
    public string Id { get; set; }
    public string AccountId { get; set; }
    public string ColorCode { get; set; }

}

1 ответ

OData позволяет вам определять отношения между сущностями. Кажется, что вы используете Web API 2.2 для OData V4, чтобы написать свой сервис. В этом случае вы можете построить отношения между Продуктами и Аккаунтами следующим образом:

Во-первых, в определении ваших классов POCO для Продуктов вам необходимо добавить свойство навигации для его учетных записей:

public class Product{
    public int Id {get;set;}
    public string AccountId {get;set;}
    public Account Account {get;set;} // define "Account" as a navigation property of Product

public class Account{
    public int Id {get;set;}
    public string Name {get;set;}
    public Address Address {get;set;} // Address may be a complex type
    public int ColorCode {get;set;}
}

Затем в классе, который наследуется от DbContextДобавьте информацию об обеих сущностях в:

public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<Account> Accounts { get; set; }

Наконец, в WebApiConfig.cs вы определяете модель, используя ODataConventionModelBuilder в соответствии с вашими потребностями. Построитель моделей автоматически распознает связь из классов POCO и сгенерирует модель для вас.

После того, как служба построена, на стороне клиента клиент отправляет такой запрос для получения Продукта и ColorCode своей Учетной записи:

GET http://host/service/Products?$expand=Account($select=ColorCode)

Пример можно посмотреть здесь: http://services.odata.org/v4/(S(xrtmlkz1igiqidututicmb2t))/TripPinServiceRW/People? $ Expand=Trips($select=TripId)

Другие вопросы по тегам