Как ветерок определяет метод действия API на основе имени объекта?

У меня есть простая сущность: контакт

Строка DBContext:

public DbSet<Contact> Contacts { get; set; }

Контроллер API:

[HttpGet]
public IQueryable<Contact> Contacts()
{
       return _contextProvider.Context.Contacts;
}

В моем поиске данных в клиенте бриза я делаю это:

var query = EntityQuery.from("Contacts")
            .orderBy(orderBy.obContact)

Это прекрасно работает, и я понимаю, что параметр from «Контакты» должен соответствовать методу действия API.

В моем getByID я делаю это:

return manager.fetchEntityByKey("Contact", contactId, true)

Это прекрасно работает, а также вызывает метод API «Контакты». Но я хотел бы знать, как ветерок взял параметр «Контакты» и знал, как вызвать метод «Контакты».

Это в метаданных?

Это произошло из моей строки DBSet в моем dbcontext? (Я думаю, что это так, но хотелось бы подтверждения). Если это так, то эти два имени должны быть равны, верно?

[HttpGet]
public IQueryable<Contact>Contacts()    // The HTTP action method name

public DbSet<Contact> Contacts { get; set; }  // The DbSet variable

Я попробовал эти изменения:

public DbSet<Contact> DBSetContacts { get; set; }

а также

[HttpGet]
public IQueryable<Contact> Contacts()
{
    return _contextProvider.Context.DBSetContacts;
}

Мой первый запрос выше, который возвращает массив, работал нормально. Моя выборка по идентификатору не удалась, он пытался найти ресурс URI «DBSetContacts».

Мой вывод состоит в том, что переменная DbSet должна иметь то же имя, что и метод URI, чтобы fetchByID работал. Это правильно?


person mwill    schedule 11.11.2014    source источник


Ответы (1)


Breeze внутренне хранит карту EntityType/ResourceName. ResourceNames — это имена методов на стороне сервера.

Карта EntityType/ResourceName — это один из элементов хранилища метаданных Breeze. Карта нового хранилища метаданных начинается пустой. Breeze заполняет его из метаданных сервера, если эти метаданные содержат сопоставления EntityType/Resource.

Как вы уже догадались, Breeze EFContextProvider генерирует метаданные с сопоставлениями, полученными из имен Entity Framework DbSet. Когда вы определяете класс Person и предоставляете его из DbContext как DbSet с именем «Persons», генератор метаданных EFContextProvider добавляет сопоставление имени ресурса «Persons» с типом сущности Person.

Дополнительные сведения см. в подразделе сопоставления EntityType/ResourceName на этой странице.

http://www.getbreezenow.com/documentation/querying-locally

Вы также можете явно обновить EntityType/ResourceMap с помощью метода ниже:

http://www.getbreezenow.com/sites/all/apidocs/classes/MetadataStore.html#method_setEntityTypeForResourceName

person Jay Traband    schedule 11.11.2014
comment
Спасибо, сэр. оцените быстрый ответ. Люблю библиотеку бриза. - person mwill; 11.11.2014