我一直在努力尝试让数据服务与新的 LightSwitch 2.0 OData 数据源一起工作。注意到 OData 3.0 仍然不受支持,我不得不退回到 2.0 版本。
碰巧我的数据上下文只不过是一些 xml 序列化对象的包装器以启用 OData 访问。这种“魔力”是使用反射提供程序发生的,并且对于所有 CRUD 操作都可以正常工作。
当我尝试在 LightSwitch 中使用此服务时,问题就开始了,并意识到我所有的实体关联都是错误的。
我的情况和你看微软的示例代码一模一样。
所以,使用这个数据模型:
[DataServiceKeyAttribute("OrderId")]
public class Order
{
public int OrderId { get; set; }
public string Customer { get; set; }
public IList<Item> Items { get; set; }
}
[DataServiceKeyAttribute("Product")]
public class Item
{
public string Product { get; set; }
public int Quantity { get; set; }
}
很明显 Order [1 - *] Items 之间的“一对多”关系。但是查看该服务的 xml 元数据,该关联被声明为“多对多”:
<Association Name="Order_Items">
<End Type="WEBfactory.StreamInsight.Adapters.Carel.DataServices.Order" Multiplicity="*" Role="Order"/>
<End Type="WEBfactory.StreamInsight.Adapters.Carel.DataServices.Item" Multiplicity="*" Role="Items"/>
</Association>
现在,在使用“服务引用”客户端时,这并没有太大的麻烦,但由于 LightSwitch 不支持“多对多”关系,我在尝试使用此服务时总是会收到警告,并且关系既不导入,也不可能手动定义。
有没有人知道如何使用反射提供程序强制执行关系类型?
谢谢!!