Silverlight + RIA: задача редактирования сущности
У меня есть приложение Silverlight 4 с EntityFramework в качестве слоя данных.
Есть две сущности: потребитель и продукты. Когда я получаю клиента из базы данных, связанные продукты также считываются, так как я добавил связанный атрибут "Include" в метаданные клиента и вызываю метод Include в запросе get:public IQueryable<customer> GetCustomerSetById(int customerId)
{
return this.ObjectContext.CustomerSet
.Include(o => o.Products)
.Where(o => o.Id = customerId);
}
Проблема в том, что когда я изменяю какое-либо свойство в продукте клиента, я получаю это исключение:
Но все работает, если я читаю продукты клиента напрямую, например, не через сущность клиента (CustomerContext), а через продукт один (ProductContext).Этот EntitySet типа - Мой мальчик.Сеть.Модели.Продукт" не делает поддержите операцию "редактировать".
Также существует свойство IsReadOnly=true в сущности продукта.
Обновление:
У меня есть все операции CUD, а также все они помечены соответствующими атрибутами Insert, Update и Delete. В противном случае он не работал бы вообще, но он работает для меня в некоторых случаях, как я написал выше.
Есть идеи?
4 ответа:
Это реальная проблема с RIA+EF, поэтому мы сохраняем все наши сущности в одном доменном сервисе, потому что на стороне клиента трудно иметь дело с несколькими сущностями, связанными через свойства навигации. Подумайте минутку, на самом деле это не имеет никакого значения, и мы используем шаблон EF T4 для генерации всех операций доменной службы в одном классе. И мы создали частичные методы для перехвата логики методов доменной службы.
Похоже, вам нужно убедиться, что у вас есть операция обновления в вашей доменной службе. Это будет выглядеть примерно так:
public void UpdateProduct(Product product) { ObjectContext.Products.AttachAsModified(product, ChangeSet.GetOriginal(product)); }
EntitySet служб RIA не поддерживает операцию 'Edit'
Поскольку вышеупомянутые решения, по-видимому, не помогают, попробуйте использовать это:
Этот мастер должен посмотреть на вашу сущность и сгенерировать соответствующие операции CRUD. Если вы не можете обновить свои сущности, у вас другая проблема.