我很抱歉,如果這是非常微不足道的,我是新的OData,我正在嘗試設置我的模型。ODataConventionModelBuilder將我的List屬性看作一個新的EntitySet,並拋出'實體'List_1Of [Type]'沒有定義鍵'。
我需要這個類來它:
public class Event
{
public bool Advertised { get; set; }
public List<Attendee> Attendees { get; set; }
[StringLength(1000)]
public string Banner { get; set; }
[Required]
public string Description { get; set; }
public Guid? Etag { get; set; }
[Required]
public DateTime From { get; set; }
public string Host { get; set; }
public int Id { get; set; }
public List<string> Photos { get; set; }
public string SponsorsSummary { get; set; }
public string SponsorsTitleText { get; set; }
[StringLength(1000)]
public string Summary { get; set; }
public IList<string> Tags { get; set; }
public int Target { get; set; }
[StringLength(1000)]
public string Thumbnail { get; set; }
[Required]
public string Title { get; set; }
public DateTime? To { get; set; }
public Address Venue { get; set; }
public string VenueDetails { get; set; }
[Required]
public bool Viewable { get; set; }
}
所以我說這個我ODataConventionModelBuilder
:
builder.EntitySet<Event>("Events");
builder.EntityType<Event>().HasKey(x => x.Id);
builder.EntityType<Event>().HasOptional(x => x.Attendees);
但是,當我試圖運行它,我得到這個錯誤:
The entity 'List_1OfAttendee' does not have a key defined.
顯然ODataConventionModelBuilder
正試圖將我的List<Attendee>
變成一個新的實體請求一個ID,但這只是一個複雜的類型,我在這裏使用它作爲模型的一部分,它不是一個導航屬性,它不會在其他地方使用。
所以我嘗試添加Attendee
到我的模式是這樣的:
builder.EntitySet<Attendee>("Attendees");
builder.EntityType<Attendee>().HasKey(x => x.Name);
但我得到完全相同的消息,所以我試圖改變EntitySet的名稱,名稱上的錯誤匹配:
builder.EntitySet<Attendee>("List_1OfAttendee");
builder.EntityType<Attendee>().HasKey(x => x.Name);
但它沒有改變任何東西。
僅供參考,我的後端是RavenDB,我沒有使用實體框架。
我真的很困惑,我發現的唯一例子是僅使用複合類型的集合來獲得導航屬性,但這裏只是我的模型所需的簡單屬性。歡迎任何建議
謝謝你,這個伎倆!不敢相信我沒有在文檔中發現它們......他們主要討論的是Convention模型生成器部分的屬性 – AlineF
不客氣:) – juunas