我在Chris Anderson的Silverlight 4中阅读了Pro Business Application, 关于从服务器公开数据的主题:使用WCF RIA服务 - 表示模型类型,不是关于表示模型对象的详细信息包含暴露另一个表示模型对象的集合的属性。
我对如何创建presentationModel有基本的想法, 但是PresentationModel如何包含另一个PresentationModel的集合? 示例ProductPM包含ProductInventoryPM的集合? 如何在域服务类中编写CRUD代码?
谢谢!
答案 0 :(得分:1)
您需要在代码中执行几项操作。首先,为了能够看到产品库存记录列表,您需要选择它们作为GetProducts域操作的一部分:
Public Function GetProducts() As IQueryable(Of ProductPM)
Return From p As Product In Me.ObjectContext.Products.Include("ProductInventories") Select New ProductPM With
{.ListPrice = p.ListPrice,
.ModifiedDate = p.ModifiedDate,
.Name = p.Name,
.ProductID = p.ProductID,
.ProductNumber = p.ProductNumber,
.ProductInventory = From i In p.ProductInventories Select New ProductInventoryPM With
{
.Quantity = i.Quantity,
.ProductID = p.ProductID
}
}
End Function
这将使它们显示在第二个数据网格中。
您还需要在ProductPM类中添加一个构造函数来初始化ProductInventory类:
Public Sub New()
ProductInventory = New List(Of ProductInventoryPM)
End Sub
最后一个问题是插入域操作的调用顺序错误。据我所知,处理此问题的最佳方法如下:
为ProductInventoryPM对象创建一个空的Insert域操作。其中不需要逻辑,但需要使用该方法才能将ProductInventoryPM对象添加到ProductPM的库存集合中。
Public Sub InsertProductInventory(ByVal ProductInventoryPM As ProductInventoryPM)
End Sub
注意:如果您希望在创建产品+初始库存记录后能够添加新的库存记录,那么您将需要在此域操作中添加逻辑。
在ProductPM的“插入域”操作中插入清单对象。这样做的一个优点是不需要调用SaveChanges。
Public Sub InsertProduct(ByVal ProductPM As ProductPM)
Dim Product As New Product
Product.Name = ProductPM.Name
Product.ProductNumber = ProductPM.ProductNumber
Product.ListPrice = ProductPM.ListPrice
Product.SellStartDate = DateTime.Now
Product.ModifiedDate = DateTime.Now
Product.SafetyStockLevel = 1000
Product.ReorderPoint = 700
Product.StandardCost = 0
Product.DaysToManufacture = 3
Product.rowguid = Guid.NewGuid()
Me.ObjectContext.Products.AddObject(Product)
Me.ChangeSet.Associate(ProductPM, Product, AddressOf UpdateProductPMKey)
For Each ProductInventoryPM As ProductInventoryPM In ProductPM.ProductInventory
Dim productInventory As New ProductInventory
With productInventory
.Bin = 1
.LocationID = 1
.ModifiedDate = DateTime.Now
.ProductID = ProductInventoryPM.ProductID
.Quantity = ProductInventoryPM.Quantity
.Shelf = "A"
End With
Product.ProductInventories.Add(productInventory)
Me.ChangeSet.Associate(ProductInventoryPM, productInventory, AddressOf UpdateProductInventoryKey)
Next
End Sub
现在,如果你运行它,一切都应该正常。让我知道它是怎么回事。
克里斯
答案 1 :(得分:0)
相关类型的CRUD方法与主要类型完全相同。在本书的SL4版本中,标题为“更新您的演示模型类型”一节的底部有一个注释,其中讨论了这一点。基本上,您只需为ProductInventoryPM模型(在同一域服务中)编写Get,Update,Insert和Delete方法,RIA Services将负责其余的工作。你有没有遇到任何问题?
答案 2 :(得分:0)
非常感谢,它工作正常。
我已经修改了ProductInventoryPM对象的Insert域操作,如下所示,因此可以将新的ProductInventory记录添加到现有产品中。
Public Sub InsertProductInventory(ByVal ProductInventoryPM As ProductInventoryPM)
如果ProductInventoryPM.ProductID<> 0然后
Dim productInventory As New ProductInventory
结束
有了productInventory .Bin = 1
.LocationID = 1
.ModifiedDate = DateTime.Now
.ProductID = ProductInventoryPM.ProductID
.Quantity = ProductInventoryPM.Quantity
.Shelf =“A”
Product.ProductInventories.Add(productInventory)
Me.ChangeSet.Associate(ProductInventoryPM,productInventory,AddressOf UpdateProductInventoryKey)结束如果
End Sub