如何在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项一个接一个。
您应该能够通过让对象实现数据契约属性来做到这一点:
[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只将其视为对子实体的更新,而不是对父实体的更新。