저는 현재 기존 Web API 프로젝트에서 OData의 가능성을 확인하는 중입니다. 코드 사용 먼저 모든 모델을 처음부터 새로 작성하여 절대적인 제어권을 갖습니다. 그러나 탐색 속성을 코드에 추가 했더라도 OData에서 제공하는 메타 데이터 링크를 통해 스키마를 검사 할 때 일부는 스키마에 없습니다. 나는이에 GET 요청을 수행 할 때 이제기존 탐색 속성이 누락되었습니다.
[DataContract]
[KnownType(typeof(User))]
public abstract class Person
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public Nullable<int> CountryID { get; set; }
[DataMember]
public Nullable<int> RelationID { get; set; }
public virtual Country Country { get; set; }
public virtual Relation Relation { get; set; }
}
, (그 문제 또는 /Country
) /User(1284)/Relation
를 사용하여 내가 정확히 얻을 :
예를 들어, 나는 Person 클래스에서 상속되는 사용자 클래스가 내가 원하는 관계 또는 국가 수업. 그러나 문제는이 연관이 없기 때문에 /Relation(16)/Country
으로 전화 할 수 없다는 것입니다.
[DataContract]
public class Relation
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Number { get; set; }
[DataMember]
public string Serial { get; set; }
[DataMember]
public Nullable<int> CountryID { get; set; }
public virtual Country Country { get; set; }
public virtual List<User> Users { get; set; }
}
그러나 알다시피, 내 관계 클래스에서 확실히 그러한 탐색 속성이 있습니다. 당신이 DbContext 클래스를 볼 때 또한 :
public DbSet<Relation> Relations { get; set; }
public DbSet<Country> Countries { get; set; }
public DbSet<User> Users { get; set; }
및 WebApiConfig이
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Relation>("Relations");
modelBuilder.EntitySet<Country>("Countries");
modelBuilder.EntitySet<User>("Users");
당신은 사실 관계 및 사용자가 탐색 특성면에서 거의 동일하다는 것을 볼 수있다, 적어도 국가들은 동일 .
만, 내가 말했듯이, 나는 중 하나로, OData 자체에서 제공되는 메타 데이터를 볼 때 :
당신은 사용자 -> 국가 및 사용자 -이> 관계가 존재하는 것을 볼 수 있지만,<Association Name="TestProject_Models_User_Country_TestProject_Models_Country_CountryPartner">
<End Type="TestProject.Models.Country" Role="Country" Multiplicity="0..1" />
<End Type="TestProject.Models.User" Role="CountryPartner" Multiplicity="0..1" />
</Association>
<Association Name="TestProject_Models_User_Relation_TestProject_Models_Relation_RelationPartner">
<End Type="TestProject.Models.Relation" Role="Relation" Multiplicity="0..1" />
<End Type="TestProject.Models.User" Role="RelationPartner" Multiplicity="0..1" />
</Association>
나라의 관계의 협회 사용자가 누락되었습니다. 그러나 데이터베이스에서 이러한 관계가 존재하고 외래 키가 제자리에 있습니다. NuGet 콘솔에서 Update-Database를 실행할 때 수행 할 코드 업데이트가 없다는 알림을받습니다.
저는 이미 전체 데이터베이스를 삭제했으며 CodeFirst가 모든 것을 다시 만들도록했습니다. OData의 최신 안정적 빌드 (4.0.0에서 4.0.30506까지)로 업데이트되었지만, 아쉽게도 아무 것도 작동하지 않습니다.
나를 따라갈 사람이 있습니까? 미리 감사드립니다!
$ 메타 데이터 문서에서 관계 유형 정의에 'TestProject_Models_User_Relation_TestProject_Models_Relation_RelationPartner' 연관을 참조하는 탐색 속성이 있습니까? 사용자 유형 정의에 이러한 탐색 속성이 있다고 가정합니다. –