Как добавить сложные свойства в модель, созданную с помощью ODataConventionModelBuilder из модели EF
У меня есть модель, которая определена в базе данных EF сначала edmx. Оттуда я выставляю некоторые таблицы и представления (главным образом представления). Как можно дополнить модель EF с помощью OData, как я могу добавить свойство навигации сложного типа в другой открытый тип EF и OData?
В настоящее время я определяю частичный класс и добавляю свойства и атрибуты, используя их. Но похоже, что можно добавить нужные свойства с помощью функциональности OData, а также, возможно, еще лучше при первом использовании. ODataConventionModelBuilder
а затем увеличить результаты. Увы, я не могу собрать рабочий пример из существующей документации API и примеров, которые я нашел.
Вот код
//This class is generated from a view by EF (edmx)...
public partial class AccountView
{
public System.Guid Id { get; set; }
public int CompanyId { get; set; }
}
//Here's augmenting the EF generated view with some additional data...
[MetadataType(typeof(AccounViewMetaData))]
public partial class AccounView
{
//This is added here explicitly. AccountView itself exposes just
//a naked key, CompanyId.
public virtual Company Company { get; set; }
//This is just in case...
public class AccounViewDomainMetaData
{
//This is to add a navigation property to the OData $metadata. How to do this
//in WebApiConfig? See as follows...
[ForeignKey("Company")]
public int CompanyId { get; set; }
}
}
//This is an EF generated class one from an edmx..-
public partial class Company
{
public Company() { }
public int CompanyID { get; set; }
public string Name { get; set; }
}
//How to add a navigation property from AccountView to Company so that it'd become
//possible to call http://example.com/Accounts?$expand=Company and http://example.com/Accounts(1)?$expand=Company ?
var builder = new ODataConventionModelBuilder();
var companySet = builder.EntitySet<Entities.Company>("Companies");
var accountSet = builder.EntitySet<Entities.AccountView>("Accounts");
accountSet.EntityType.HasKey(i => i.Id); //EF has hard time recognizing primary keys on database first views...
//How to hide this from the result if there's a way to create a ?$expand=Company navigation property?
//accountSet.EntityType.Ignore(i => i.CompanyId);
Это связано с моим другим вопросом относительно OData и моделей.