Breeze กำหนดวิธีการทำงานของ API ตามชื่อเอนทิตีอย่างไร

ฉันมีเอนทิตีที่เรียบง่าย: ติดต่อ

บรรทัด DBContext:

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

ตัวควบคุม API:

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

ในการดึงข้อมูลในไคลเอนต์ Breeze ฉันทำสิ่งนี้:

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

มันใช้งานได้ดี และฉันเข้าใจได้ว่าพารามิเตอร์ from "ผู้ติดต่อ" จะต้องตรงกับวิธีการทำงานของ API

ใน getByID ของฉัน ฉันทำสิ่งนี้:

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

ใช้งานได้ดีและยังทำการเรียกเมธอด API "ผู้ติดต่อ" อีกด้วย แต่ฉันอยากรู้ว่า Breeze ใช้พารามิเตอร์ "ติดต่อ" อย่างไรและรู้ว่าจะเรียกวิธี "ผู้ติดต่อ"

สิ่งนี้อยู่ในข้อมูลเมตาหรือไม่

มันมาจากบรรทัด 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;
}

แบบสอบถามแรกของฉันด้านบนที่ส่งคืนอาร์เรย์ทำงานได้ดี การดึงข้อมูลด้วย ID ของฉันล้มเหลว พยายามค้นหาทรัพยากร URI "DBSetContacts"

ข้อสรุปของฉันคือตัวแปร DbSet ต้องมีชื่อเดียวกันกับวิธี URI เพื่อให้ fetchByID ทำงาน ถูกต้องไหม?


person mwill    schedule 11.11.2014    source แหล่งที่มา


คำตอบ (1)


Breeze เก็บแผนที่ EntityType/ResourceName ไว้ภายใน ResourceNames คือชื่อของเมธอดฝั่งเซิร์ฟเวอร์

แมป EntityType/ResourceName เป็นหนึ่งในรายการใน Breeze MetadataStore แผนที่ของ MetadataStore ใหม่เริ่มว่างเปล่า 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