2014-12-29 7 views
5

Bu, ya ileriye doğru süper ileriye doğru veya yanıtlaması nispeten kolaydır. Benim OData Yönlendirme Sözleşmeleri kurmak amacıyla Aşağıdaki kod var:ODataConventionModelBuilder çoklu ad alanlarıyla

// OData 
var builder = new ODataConventionModelBuilder(); 

// OData entity sets.. 
builder.EntitySet<Book>("Books"); 
builder.EntitySet<Shelf>("Shelves"); 

// Bound Function..has to be located on the Tables Controller... 
builder.Namespace = "BookService"; 
builder.EntityType<Table>().Collection 
    .Function("MostRecent") 
    .Returns<DateTimeOffset>(); 

builder.Namespace = "ShelfService"; 
builder.EntityType<Shelf>() 
    .Action("NearestEmptyShelf"); 

... Ama bu sorun uygulama başladığında, her şey oldukça İlk işlev BookService.MostRecent erişilebilir olmaktan daha ShelfService karşı yönlendirilir olduğunu ve ShelfService.NearestEmptyShelf.

Onların OData Kontrolörleri hizmet (eylemler/fonksiyonları) oluştururken emin diğerleri bu özel sorun haline çalıştırmak değilim. Ama ben sadece OData Yönlendirme Koleksiyonunda birden fazla ad alanınız olup olmamasına dair kesin bir cevabın peşindeyim.

cevap

0

Sen builder.Namespace = "ShelfService"; ile builder.Namespace = "Bookservice"; sizin ad üzerine yazıyorsunuz.

ihtiyacınız aşağıda new ODataConventionModelBuilder();

iki ayrı örneklerini iki ayrı ad alanları kullanmak için Ben bu mekanizmayı uyguladık beri süre oldu

// Book OData Endpoint 
var book_builder = new ODataConventionModelBuilder(); 

// Book OData entity sets.. 
book_builder.EntitySet<Book>("Books"); 

// Book Bound Function..has to be located on the Tables Controller... 
book_builder.Namespace = "BookService"; 
book_builder.EntityType<Table>().Collection 
    .Function("MostRecent") 
    .Returns<DateTimeOffset>(); 
// Book Config 
config.MapODataServiceRoute(
    routeName: "OData - Book", 
    routePrefix: "book", 
    model: book_builder.GetEdmModel()     
    ); 

// Shelf OData Endpoint 
var shelf_builder = new ODataConventionModelBuilder(); 

// Shelf OData Entity Sets 
shelf_builder.EntitySet<Shelf>("Shelves"); 

// Shelf Bound Function..has to be located on the Tables Controller... 
shelf_builder.Namespace = "ShelfService"; 
shelf_builder.EntityType<Shelf>() 
    .Action("NearestEmptyShelf"); 
    .Returns<whatever you planned on returning>() 
//Shelf Config 
config.MapODataServiceRoute(
    routeName: "OData - Shelf", 
    routePrefix: "shelf", 
    model: shelf_builder.GetEdmModel()     
    ); 

OData V4 için, ancak olabilir Yukarıdaki yöntemi kullanarak, birden çok ad alanındaki/denetleyicideki bağlı işlevleri kullanmak için AttributeRoutingConvention'un üzerine yazmak. Ben bir noktada bir hıçkırık vardı biliyorum ve sorunu düzeltmek için bir CustomMapODataServiceRoute sağlamak için public static class HttpConfigExt kullanan bir public class CustomAttributeRoutingConvention : AttributeRoutingConvention için yığın taşması üzerinde iyi bir yöntem bulma bitti.

+0

Teşekkürler! Ben bir çatlak vereceğim ve nasıl gittiğini göreceğim –

İlgili konular