2016-08-03 17 views
0

我有一個擁有兩個導航屬性的擁有類,每個導航屬性引用一個ContactInfo對象,一個用於所有者屬性,另一個用於緊急聯繫人屬性。如何配置一個OData v4模型,使多個導航道具到同一張表

[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; } 
} 

當我試圖通過我的OData服務URL來獲得所有權的集合:

http://localhost:52283/odata/Ownership 

我收到以下錯誤:

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

據我瞭解,這個錯誤是類似於這個問題發生了什麼:

Error while configuring multiple Navigation Properties to same table

問題是我正在使用OData v4,它引用System.Web.OData.Builder而不是System.Web.Http.OData.Builder。這意味着使用WithMany()調用來使用Fluent API來配置實體的答案(如在鏈接問題中)會失敗,因爲System.Web.OData.Builder中沒有WithMany()調用。

回答

0

原來的相關對象需要他們相關的集合屬性飾有InverseProperty屬性:

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; } 
} 
相關問題