Silverlight + RIA:问题编辑实体

时间:2011-06-03 15:46:22

标签: silverlight entity-framework ria

我有一个带有EntityFramework的Silverlight 4应用程序作为数据层。

有两个实体:客户和产品。当我从数据库获取客户时,也会读取相关产品,因为我在客户的元数据中添加了相关的“包含”属性,并在获取查询中调用了包含方法:

public IQueryable<customer> GetCustomerSetById(int customerId)
{
    return this.ObjectContext.CustomerSet
        .Include(o => o.Products)
        .Where(o => o.Id = customerId);
}

当我更改客户产品中的任何属性时出现此异常的问题:

  

此类型的EntitySet   'MyApp.Web.Models.Product'没有   支持“编辑”操作。

但如果我直接阅读客户产品,一切都有效,例如不是通过客户实体(CustomerContext),而是通过产品一(ProductContext)。

产品实体中还有IsReadOnly = true属性。

更新:

我拥有所有CUD操作,并且还使用相关的Insert,Update和Delete属性标记了所有这些操作。否则它根本不起作用,但在某些情况下它对我有用,如上所述。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

这是RIA + EF的真正问题,因此我们将所有实体保留在一个域服务中,因为在客户端,很难处理通过导航属性相关的多个实体。想想它实际上没什么区别,我们使用EF T4模板在一个类中生成所有域服务操作。我们生成了部分方法来拦截域服务方法的逻辑。

答案 1 :(得分:0)

听起来您需要确保域服务中有更新操作。它看起来像这样:

public void UpdateProduct(Product product)
{
    ObjectContext.Products.AttachAsModified(product, ChangeSet.GetOriginal(product));
}

答案 2 :(得分:0)

RIA Services EntitySet does not support 'Edit' operation

由于上述解决方案似乎没有帮助尝试使用它:

Domain Service Wizard

此向导应查看您的实体,并生成相应的CRUD操作。 如果您无法更新实体,则会遇到其他问题。

答案 3 :(得分:0)

您是否尝试过将Include移至最后?

Return this.ObjectContext.CustomerSet
        .Include(o => o.Products)
        .Where(o => o.Id = customerId);

可能是:

Return (from o in this.ObjectContext.CustomerSet
        where o.Id = customerId
        select o).Include("Products");