Должен ли я удалить все наследование из моей модели для работы с сервисами ria? - PullRequest
0 голосов
/ 28 марта 2010

Я уже писал несколько вопросов по этому вопросу, но это не так.

Итак, рассмотрим небольшую часть нашей модели:

  • Person
    • Клиент
    • Сотрудник
    • Супруг

Person - это базовый класс, у которого есть 3 класса, которые наследуются от него.

Эти 4 являются центральными в нашем дизайне и связаны со многими другими объектами. Я мог бы решить все проблемы, с которыми я сталкиваюсь в ria-services, удалив наследование, но это действительно увеличило бы сложность модели.

Первая проблема, с которой я столкнулся, заключалась в том, что я не мог запрашивать клиентов, сотрудников или супругов, но кто-то дал мне решение, заключающееся в добавлении чего-то вроде этого в DomainService:

    public IQueryable<Employee> GetEmployees()
    {
        return this.ObjectContext.People.OfType<Employee>();
    }

    public IQueryable<Customer> GetCustomers()
    {
        return this.ObjectContext.People.OfType<Customer>();
    }

    public IQueryable<Spouse> GetSpouses()
    {
        return this.ObjectContext.People.OfType<Spouse>();            
    }

Затем я попробовал что-то, что показалось мне вполне нормальным:

var employee = new Employee()
{
    //.... left out to reduce the length of this question 
};

var spouse = new Spouse() 
{
    //.... left out to reduce the length of this questions
};

employee.Spouse = spouse;

context.People.Add(spouse);
context.People.Add(employee);
context.SubmitChanges();

Тогда я получаю следующее исключение:

Невозможно получить набор объектов для производный тип сущности 'Супруг'. использование EntityContainer.GetEntitySet (Type) для получить набор сущностей для базовой сущности введите «Персона».

Даже когда супруг уже находится в базе данных, и сначала я получаю его, но получаю похожие исключения.

Также обратите внимание, что по некоторым причинам в некоторых местах вместо "Люди" используется "Персоны" ...

Так как мне решить эту проблему, что я делаю не так? и буду ли я врезаться в стены при использовании сервисов ria с наследованием?

Я нашел некоторые ссылки в Интернете, все говорят, что это работает, а затем некоторые DomainService код, в котором они что-то поменяли, но без подробностей ...

Я использую VS2010 RC1 + Silveright 4

Примечание: Окно источников данных, которое волшебным образом работает во всех сеансах MIX, не работает для меня ... оно никогда ничего не отображает

1 Ответ

2 голосов
/ 05 апреля 2010

Такое поведение было связано с ошибкой в ​​RC1. Это обсуждено более подробно в http://forums.silverlight.net/forums/p/169599/384514.aspx#384514.

Не существует известного обходного пути для RC1, но иерархия, которую вы показываете, должна хорошо работать в RC2. Ошибка была связана с ассоциациями, использующими производные типы (EntityRef и EntityCollection), поэтому я подозреваю, что ассоциация Spouse и стала причиной ошибки в вашем сценарии.

Относительно "Persons" v. "People" - выбор имени для набора сущностей происходит от множественного числа EF для имен сущностей. Имя запроса на клиенте происходит от соответствующего имени запроса в DomainService, что означает, что вы можете предоставить общедоступный IQueryable GetPeople (), если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...