如果有太多/不够的细节或其中一些是无关的,请道歉,这是我在这个板上的第一篇文章:
背景
我目前正在使用VS2010在C#中开发一个基于Silverlight4和WCF RIA(SP1)的应用程序。堆栈为:SQL Server->nHibernate->域服务->服务代理->Silverlight 4客户端(MVVM)
我在数据库中有4个表,其中有相同的字段,每个表都持有相同数据的不同"类型"。
数据实际上应该在一个带有类型列的表中,但这是一个我无法更改的遗留数据库。
我为每个表创建了一个POCO和一个处理访问和更新四个不同实体集的单个域服务。这些类型被投影到Silverlight客户端,并且所有CRUD内容都按预期工作。
问题
我有一个视图模型,其中包含一个ObservableCollection,其中T是4种实体类型之一,但我不想使用4个集合来容纳不同的实体类型。UI将允许用户选择类型,我希望使用相同的集合和UI绑定来编辑该数据。
我试过
-
正在创建通用域服务,但不支持它们。
-
让服务器端实体类型从抽象类继承或实现接口,但域服务不投影抽象类或接口。
-
为实现客户端接口的4个投影实体创建客户端分部类。但是,当我尝试将
ObservableCollection<MyEntity>
分配给ObservableCollection<MyEntityInterface>
时,我会得到以下错误:
Cannot implicitly convert type 'System.Collections.ObjectModel.ObservableCollection<BusinessDomain.StandardInterestRate>' to 'System.Collections.ObjectModel.ObservableCollection<BusinessDomain.IInterestRate>'
我怀疑原因是StandardInterestRate继承自RIA实体类。任何想法都值得赞赏。
尝试
ObservableCollection<MyEntity> entities = ...
ObservableCollection<MyEntityInterface> iEntities = new ObservableCollection(entities.Cast<MyEntityInterface>());