Entity Framework 4 Свойства источников отсутствуют в источниках данных - PullRequest
2 голосов
/ 09 июня 2011

У меня есть БД, которая содержит 3 таблицы - Actors, Films, Actors_Films. 2 из этих таблиц имеют отношение «многие ко многим» («Актеры и фильмы»), которое моделируется с использованием таблицы соединений («Actors_Films»).

Я использую EF4 в приложении Silverlight. Я создал модель EF, и дизайнер edmx показывает только мои сущности «Акторы» и «Фильмы», но у каждого из них есть свойство навигации по отношению к другому объекту (у «Актеров» есть свойство навигации по «Фильмам», а у «Фильмов» есть свойство навигации по «Актерам»). .

Я добавил доменную службу и создал проект. Используя актеров в качестве примера, я теперь хочу добавить представление, содержащее форму данных, которая позволит мне циклически проходить через актеров, и сетку данных, которая покажет все фильмы, в которых появился выбранный в данный момент актер. Однако на вкладке Источник данных у меня есть контекст домена, содержащий 2 объекта - актеры и фильмы. Эти 2 объекта отображают только их фактические столбцы, свойства навигации не отображаются:

Актеры --- ActorID --- ActorName

Фильмы --- FilmID --- FilmTitle

Это правильно? Я думал, что свойства навигации должны отображаться.

Мое настоящее приложение более сложное, чем это, но это упрощенный пример, чтобы сосредоточиться на актуальной проблеме.

Спасибо

Мик

1 Ответ

1 голос
/ 09 июня 2011

Службы WCF Ria не поддерживают связь «многие ко многим».У вас должна быть таблица ассоциации на edmx.Чтобы свойства Navigate отображались на клиенте, необходимо добавить атрибут [Include] для навигации по свойствам в соответствующих метаданных Entity.Метаданные обычно создаются при создании какого-либо DomainService.Например, мы имеем отношение многих ко многим ContractPosition и OrderPosition:

//ContractPositionsService.metadata.cs
[MetadataTypeAttribute(typeof(ContractPosition.ContractPositionMetadata))]
public partial class ContractPosition
{
    internal sealed class ContractPositionMetadata
    {
        public int ContractPositionId { get; set; }
        [Include]
        public EntityCollection<ContractToOrderLink> ContractToOrderLinks { get; set; }

        ...
    }
//ContractToOrdersLinksService.metadata.cs
[MetadataTypeAttribute(typeof(ContractToOrderLink.ContractToOrderLinkMetadata))]
public partial class ContractToOrderLink
{

    internal sealed class ContractToOrderLinkMetadata
    {
        [Include]
        public ContractPosition ContractPosition { get; set; }

        public int ContractPositionId { get; set; }

        [Include]
        public OrderPosition OrderPosition { get; set; }

        public int OrderPositionId { get; set; }            
    }
}


//OrderPositionsService.metadata.cs
[MetadataTypeAttribute(typeof(OrderPosition.OrderPositionMetadata))]
public partial class OrderPosition
{               
    internal sealed class OrderPositionMetadata
    {
        public int OrderPositionId { get; set; }        

        [Include]
        public EntityCollection<ContractToOrderLink> ContractToOrderLinks { get; set; }

        ...
    }
}
...