最初に EF コードと Odata に問題があります。
メタデータに移動すると、すべての関係が次のように定義されていることがわかります。
<NavigationProperty Name="Jobs" ToRole="Jobs" FromRole="Applicant" Relationship=".Applicant_Jobs"/>
リレーションシップ名の前のピリオドに注目してください。
これにより、サービス参照をコンソール アプリケーションに追加できなくなります。カスタム ツール エラーが発生します。
指定されたスキーマは無効です。エラー: 関係属性が無効です - 値 '.Applicant_Jobs' は、そのデータ型によると無効です。
私のデータ コントラクトは次のように定義されています。
[DataContract]
public class Applicant
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Forename { get; set; }
[DataMember]
public string Surname { get; set; }
[DataMember]
public string EmailAddress { get; set; }
[DataMember]
public string PassPhrase { get; set; }
[DataMember]
public string City { get; set; }
[DataMember]
public string County { get; set; }
[DataMember]
public string Country { get; set; }
[DataMember]
public DateTime CreationDate { get; set; }
[DataMember]
public ICollection<Job> Jobs { get; set; }
}
[DataContract]
public class Job
{
[DataMember]
public Applicant Applicant { get; set; }
[DataMember]
public JobStatus JobStatus { get; set; }
[DataMember]
public int ID { get; set; }
[DataMember]
[ForeignKey("Applicant")]
public int ApplicantID { get; set; }
[DataMember]
[ForeignKey("JobStatus")]
public int JobStatusID { get; set; }
[DataMember]
public string JobTitle { get; set; }
[DataMember]
public string WebsiteURL { get; set; }
[DataMember]
public string Reference { get; set; }
[DataMember]
public string Location { get; set; }
[DataMember]
public string Salary { get; set; }
[DataMember]
public string ContactName { get; set; }
[DataMember]
public string ContactEmail { get; set; }
[DataMember]
public string ContactPhone { get; set; }
[DataMember]
public string Pros { get; set; }
[DataMember]
public string Cons { get; set; }
[DataMember]
public string GeneralNotes { get; set; }
[DataMember]
public DateTime CreationDate { get; set; }
[DataMember]
public bool Archived { get; set; }
[DataMember]
public ICollection<JobProgression> JobProgress { get; set; }
}
ご覧のとおり、どこにも完全な停止を置いているわけではありませんが、何らかの理由で、モデル内の関係ごとに 1 つ生成されます。つまり、カスタム ツールは失敗します。