关于使用带有RIA服务的presentationModels上的接口的问题。
可以通过实现接口的Ria Services公开对象吗?
界面:
public interface TestInterface
{
public int ID {get;set;}
}
我们有一个presentationModel:
public class TestPresentationModel : TestInterface
{
[Key]
public int ID {get;set;}
}
我现在收到编译错误: DomainService“SomeDomainService”中的实体“TestInterface”没有定义键。 DomainService操作公开的实体必须至少有一个使用KeyAttribute标记的公共属性。
我尝试添加[Key]属性,但后来出现以下错误: 派生实体类型'TestPresentationModel'必须在根实体'TestInterface'的KnownTypeAttribute中声明。
我尝试添加[KnownTypeAttribute]属性,但后来出现以下编译错误: 属性“KnownType”在此声明类型上无效。它仅对'class,struct'声明有效。
似乎Ria服务试图将接口视为一个实体?我们怎样才能克服这个问题?
问候,
的Stephane
答案 0 :(得分:4)
可以在服务器和客户端使用您需要的类(viewModel)接口。为此,您需要与接口实现共享接口和部分viewmodel类。
在您的情况下,您需要在服务器项目中定义类和文件:
文件:ITestInterface.shared.cs
public interface TestInterface{
public int ID {get;set;}
}
文件:TestPresentationModel.cs
public partial class TestPresentationModel {
[Key]
public int ID {get;set;}
}
文件:TestPresentationModel.ITestInterface.shared.cs
public partial class TestPresentationModel : ITestInterface {
// can be empty cause the interface implementation is in TestPresentation.cs
}
答案 1 :(得分:0)
一种可能性是让客户端实体实现此接口。这就是我所做的。将文件添加到与实体位于同一名称空间的Silverlight应用程序中,然后只扩展实体(它们都在部分类中定义):
namespace My.Model.Namespace
{
public partial class TestPresentationModel : TestInterface
{
...
}
}
然后只有你的客户端实体有这个界面,所以这可能不是你拍摄的,但它对我来说效果很好。