WCF RIA Services & Windows Azure => Для сущности не определен ключ - PullRequest
3 голосов
/ 26 августа 2011

Справочная информация

При разработке с помощью служб Windows Azure и WCF RIA я видел множество случайных ошибок и общих неприятных ситуаций, но эта действительно является вершиной.

У меня есть приложение со следующей архитектурой: 2 веб-роли (MVC3 и ASP.NET с Silverlight RIA) => Бизнес-уровень => Уровень данных (внешние службы / хранилище таблиц / SQL Azure). Службы ASP.NET (профиль / роли / сеансы) хранятся в табличном хранилище.

В связи с недавними изменениями требований необходимо добавить мобильный сайт. Я хотел поделиться (на стороне сервера) ViewModels для обоих проектов GUI. Для иллюстрации:

enter image description here

Моя проблема

Теперь я получаю страшное исключение "Не найдено", когда мой проект размещен в среде Windows Azure. С помощью fiddler я обнаружил, что он возвращает следующее исключение:

Объект «XXModel» в DomainService «XXService» не определите ключ. Типы сущностей, предоставляемые операциями DomainService должно иметь хотя бы одно открытое свойство, помеченное KeyAttribute.

Странно то, что эта вещь работает безупречно в локальной среде разработки Azure, но не при загрузке в облако. Я думаю, что эта ошибка связана с тем, что ViewModels теперь находятся в другой сборке, чем RIA Services, но почему она будет работать локально, а не удаленно?

Если кому-то понадобится дополнительная информация, я буду рад ответить на ваши вопросы.

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Я решил проблему.Похоже, что службы RIA, только если они размещены в Windows Azure, не могут получить атрибуты классов моделей, определенных в другой сборке, отличной от той, в которой размещаются службы.

0 голосов
/ 26 августа 2011

Есть ли у вашей сущности свойство, помеченное атрибутом [Key]?Например:

public class WidgetDef
{
    [Key]
    public int WidgetId { get; set; }

    public string Title { get; set; }
}

Это необходимо для типов, используемых с RIA DomainServices - как указано в сообщении об ошибке в вашем вопросе.

Хотя я не знаю, почему это будет работать насреда разработки, а не в реальной среде.

...