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

本文关键字:定义 数据结构 服务 RIA | 更新日期: 2023-09-27 18:09:05

如果我在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列表作为一个整体,并且在插入/更新方法在服务器上调用每个SingleShapeEntity项一个接一个。

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

您应该能够通过让对象实现数据契约属性来做到这一点:

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

然后在您的域服务中有InsertShapeEntity(ShapeEntity实体)的方法。在这个方法中,你可以对实体列表做任何你需要做的事情。

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

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。现在,这将触发在服务器上调用的更新方法,

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

如果没有Updated字段,RIA服务不会认为ShapeEntity已经更新,也不会调用服务器更新方法。当您更新ShapeEntities时,RIA只将其视为对子实体的更新,而不是对父实体的更新。