Bagaimana cara mudah menentukan metode tindakan API berdasarkan nama entitas?

Saya memiliki entitas sederhana: Kontak

Baris DBContext:

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

Pengontrol API:

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

Dalam pengambilan data saya di klien angin saya melakukan ini:

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

Itu berfungsi dengan baik, dan saya dapat memahami bahwa parameter dari "Kontak" harus cocok dengan metode tindakan API.

Di getByID saya, saya melakukan ini:

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

Itu berfungsi dengan baik, dan itu juga membuat panggilan ke metode API "Kontak". Tapi saya ingin tahu bagaimana mudahnya mengambil parameter "Kontak" dan mengetahui cara memanggil metode "Kontak".

Apakah ini ada dalam metadata?

Apakah itu berasal dari baris DBSet saya di dbcontext saya? (Saya kira memang demikian, tetapi ingin konfirmasi). Kalau begitu maka kedua nama ini pasti sama kan?

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

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

Saya mencoba perubahan ini:

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

Dan

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

Permintaan pertama saya di atas yang mengembalikan array berjalan dengan baik. Pengambilan saya berdasarkan ID gagal, ia mencoba menemukan sumber daya URI "DBSetContacts".

Kesimpulan saya adalah variabel DbSet harus memiliki nama yang sama dengan metode URI agar FetchByID dapat berfungsi. Apakah itu benar?


person mwill    schedule 11.11.2014    source sumber


Jawaban (1)


Breeze secara internal menyimpan peta EntityType/ResourceName. ResourceNames adalah nama metode sisi server.

Peta EntityType/ResourceName adalah salah satu item di Breeze MetadataStore. Peta MetadataStore baru dimulai dengan kosong. Breeze mengisinya dari metadata server jika metadata tersebut berisi pemetaan EntityType/Resource.

Seperti yang Anda duga, Breeze EFContextProvider menghasilkan metadata dengan pemetaan yang berasal dari nama Entity Framework DbSet. Saat Anda mendefinisikan kelas Person dan mengeksposnya dari DbContext sebagai DbSet bernama "Persons", generator metadata EFContextProvider menambahkan pemetaan dari nama sumber daya "Persons" ke tipe entitas Person.

Untuk informasi selengkapnya lihat subtopik pemetaan 'EntityType/ResourceName" di halaman ini.

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

Anda juga dapat memperbarui EntityType/ResourceMap secara eksplisit melalui metode di bawah ini:

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

person Jay Traband    schedule 11.11.2014
comment
Terima kasih Pak. hargai respon cepatnya. Suka perpustakaan angin sepoi-sepoi. - person mwill; 11.11.2014