如何在RIA服务中定义数据结构

时间:2011-09-20 22:41:27

标签: c# .net silverlight

如果我在这样的RIA服务中有一个实体,

[EnableClientAccess]
public class ShapeEntity
{
    [Key]
    public int Id { get; set; }
    [Association("Shapes", "Id", "Id")]
    [Include()]
    public IEnumerable<SingleShapeEntity> ShapeEntities { get; set; }
}

上面的问题是我只想让ShapeEntities保存与ShapeEntity相关的信息,而不是它自己的实体。

它是一个单独的实体的问题是我在ShapeEntities列表中添加或更新它调用服务器上SingleShapeEntity的插入/更新方法。

我真的不想要这个。我宁愿它是这样的,

[EnableClientAccess]
public class ShapeEntity
{
    [Key]
    public int Id { get; set; }
    public IEnumerable<SingleShapeEntity> ShapeEntities { get; set; }
}

但是当我这样做时会发生什么是ShapeEntities最终没有被编译到客户端实体。

关于我为什么要整体这样做的另一点是我需要能够在整个服务器上的ShapeEntities列表上运行,并且目前在服务器上调用insert / update方法SingleShapeEntity项目一个接一个。

2 个答案:

答案 0 :(得分:0)

您应该能够通过让对象实现数据协定属性来实现此目的:

[DataContractAttribute]
public partial class ShapeEntity
{
    [Key]
    [DataMemberAttribute()]
    public int Id { get; set; }
    [DataMemberAttribute()]
    public IEnumerable<SingleShapeEntity> ShapeEntities { get; set; }
}

然后在您的域服务中有一个InsertShapeEntity(ShapeEntity实体)的方法。在该方法中,您可以对实体列表执行任何操作。

答案 1 :(得分:0)

我不得不使用一个解决方法,我为服务器上的SingleShapeMethod定义了一个插入方法,它没有做任何事情,像这样,

public void InsertShapeEntity(SingleShapeEntity shapeEntity)
{
}

我为可添加到ShapeEntities中的每个SingleShapeEntity调用了这个。我不想在这种方法中处理它们,因为我需要立即处理所有信息。

然后我必须像这样定义ShapeEntity,

[EnableClientAccess]
public class ShapeEntity
{
    [Key]
    public int Id { get; set; }
    [Association("Shapes", "Id", "Id")]
    [Include()]
    public IEnumerable<SingleShapeEntity> ShapeEntities { get; set; }
    public DateTime Updated { get; set; }
}

当我更新ShapeEntities时,我必须将Updated字段设置为DateTime.Now,这样就会触发在服务器上调用更新方法,

public void UpdateShapeEntity(ShapeEntity entity)
{
    // handle the new set of ShapeEnties that have been defined as a whole
}

如果没有Updated字段,RIA服务不会认为ShapeEntity已更新,并且未调用服务器更新方法。更新ShapeEntities时,RIA会将其视为仅对子实体的更新,而不是父项。

不是最好的解决方案,但它确实有效。