2016-04-14 23 views
0

500 benim Kontrolörleri biriyle biraz Sorunu var atmak.OData Fonksiyonlar

Everytime i 500 atılır parametresi ile bazı işlevi çağırmak için denemek ve ayıklarken i işlev bile çağrılmaz görebilirsiniz.

İlk my WebApiConfig:

public static class WebApiConfig 
{ 
     public static void Register(HttpConfiguration config) 
     { 
      ODataModelBuilder builder = new ODataConventionModelBuilder(); 
      builder.EntitySet<Entity>("Entities"); 
      builder.EntitySet<DataTypes>("DataTypes"); 
      builder.EntitySet<ObjectValue>("ObjectValues"); 
      builder.EntitySet<Attributes>("Attributes"); 
      builder.EntitySet<Objects>("Objects"); 
      builder.Namespace = "EAVService.Controllers"; 
      builder.Action("FullAttributes").Returns<IHttpActionResult>() 
       .CollectionParameter<Attributes>("Attributes"); 
      builder.Action("FullValues").Returns<IHttpActionResult>() 
       .CollectionParameter<ObjectValue>("ObjectValue"); 

      config.MapODataServiceRoute(
       routeName: "ODataRoute", 
       routePrefix: "odata", 
       model: builder.GetEdmModel()); 
      config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; 
     } 
    } 

Benim Varlık:

[Table("ObjectValue")] 
public partial class ObjectValue 
{ 
    public ObjectValue() 
    { 


    } 
    [Key] 
    [Column(Order = 0)] 
    public int ObjectId { get; set; } 

    [Key] 
    [Column(Order = 1)] 
    [StringLength(50)] 
    public string Attribute { get; set; } 

    [StringLength(256)] 
    public string AttributeVal { get; set; } 

    public virtual Attributes Attributes { get; set; } 

    public virtual Objects Objects { get; set; } 
} 

ve benim Denetleyici:

public class ObjectValuesController : ODataController 
{ 
    private EAVModel db; 

    public ObjectValuesController(IDbConnectionProvider provider) 
    { 
     db = new EAVModel(provider.GetDbConnection()); 
    } 

    // GET: odata/ObjectValues 
    [EnableQuery] 
    public IQueryable<ObjectValue> GetObjectValues() 
    { 
     IQueryable<ObjectValue> query = db.ObjectValue.AsQueryable(); 
     return query; 
    } 

    // GET: odata/ObjectValues(5) 
    [EnableQuery] 
    public IQueryable<ObjectValue> GetObjectValues([FromODataUri] string key) 
    { 
     IQueryable<ObjectValue> result = db.ObjectValue.Where(objectValue => objectValue.ObjectId == Convert.ToInt32(key)).AsQueryable(); 

     return result; 
    } 

....}

Yöntem ilk Get iyi çalışıyor. ikinci gelince

i Dahili Sunucu Hatası olsun Parametreleri olan alın. bana yanlış ne olabilir bir ipucu verebilir

http://localhost:80/EAVServiceAPI/odata/ObjectValues(1)

birisi? o ObjectValue nesne üzerinde anahtar uymuyor,

Selamlar Andre

cevap

0

anahtarla yöntem ObjectValue değil IQueryable<ObjectValue> dönmelidir ve key parametre hatalı. ve Attribute üzerinde ObjectValue numaralı anahtar özelliklerine sahip olmak mı istiyorsunuz? böylece aksi takdirde anahtarları maç adlarıyla GetObjectValues yönteme 2 anahtar parametreleri var Key nitelikten birini kaldırmak ve key parametrenin türünü sağlamak için gerekirse ObjectValue üzerine anahtarının türünü eşleşir.

+0

Tamam .. bu yüzden benim yöntemini değiştirdi: Kamu ObjectValue GetObjectValues ​​([FromODataUri] int ObjectId, string Attribute) {...} işlevi şu işleviyle çağırmayı denediğimde: link Şu anda Hata: { "hata": { "code": "", "message" : "Gereksinimle eşleşen hiçbir HTTP kaynağı bulunamadı. est uri 'http: // localhost/EAVServiceAPI/OData/ObjectValues ​​(Nesne Kimliği = 1, Özellik =' ASD ')' "" innererror. ": { "mesaj":" Hiçbir yönlendirme kongre için bir eylem seçin bulunmuştur . ":"", "StackTrace": "" type '~/EntitySet/anahtarla' şablonla OData yolu "" } } Selamlar Andre –

+0

Eğer gerçekten 2 anahtar istiyorsunuz}? 'ObjectId' bana anahtar gibi geliyor. – TomDoesCode

+0

Evet anahtar istiyorum. ObjectId ve Attribute, farklı tablolardan Yabancı Anahtarlardır. Selamlar Andre –