2016-08-03 8 views
0

Ich habe eine Ownership-Klasse mit zwei Navigationseigenschaften, die jeweils auf ein ContactInfo-Objekt verweisen, eines für die Eigentümereigenschaft und eines für die Notfallkontakteigenschaft.So konfigurieren Sie ein OData v4-Modell mit mehreren Navigationsrequisiten für dieselbe Tabelle

[Table ("A_OWNERSHIP")] 
public class Ownership { 

    public Ownership() {} 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 

    [Required] 
    [Column("OWNER_ID")] 
    public int ownerID { get; set; } 

    [Column("EMERGENCY_CONTACT_ID")] 
    public int? emergencyContactID { get; set; } 

    // ** other members ellided ** 

    public virtual ContactInfo owner { get; set; } 

    public virtual ContactInfo emergencyContact { get; set; } 
} 

Wenn ich versuche, die Sammlung von Eigentümern durch meine OData-Service-URL zu erhalten:

http://localhost:52283/odata/Ownership 

Ich erhalte die folgende Fehlermeldung:

ORA-00904: \"Extent1\".\"ContactInfo_ID\": invalid identifier","type":"Oracle.ManagedDataAccess.Client.OracleException" 

entnehme ich, dass dieser Fehler ist ähnlich was passiert in dieser Frage:

Error while configuring multiple Navigation Properties to same table

Das Problem ist, dass ich OData v4 verwende, die System.Web.OData.Builder und nicht System.Web.Http.OData.Builder verweist. Dies bedeutet, dass die Antworten (wie in der verknüpften Frage), die Fluent-API verwenden, um die Entität mithilfe des WithMany() -Aufrufs zu konfigurieren, fehlschlagen, da in System.Web.OData.Builder kein WithMany() -Aufruf erfolgt.

Antwort

0

Schaltet das zugehörige Objekt aus mit dem InverseProperty Attribut schmückten ihre zugehörige Sammlung Eigenschaften benötigt:

public class ContactInfo { 

    public ContactInfo() { 

     this.owners = new HashSet<Ownership>(); 
     this.emergencyContacts = new HashSet<Ownership>(); 
    } 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 

    // *** other members ellided ***  

    [InverseProperty("owner")] 
    public virtual ICollection<Ownership> owners { get; private set; } 

    [InverseProperty("emergencyContact")] 
    public virtual ICollection<Ownership> emergencyContacts { get; private set; } 
} 
Verwandte Themen