2

我已经完成了与 Silverlight 和 Ria 服务相关的基本教程,现在我正在尝试扩展我以前使用过的模型。

我有一个想使用 Ria Services 的 Silverlight 项目。与我见过的 Ria 服务教程不同,我希望让我的域服务在包含我的域实体(使用 EF 创建)的业务对象 (DLL) 项目中使用存储库对象。

这是我正在使用的域服务的示例片段:

[EnableClientAccess()]
public class ContactService : DomainService
{
    public List<Contact> ContactSearch(string lastName)
    {
        ContactRepository rep = new ContactRepository();
        return rep.SearchByLastName(lastName);
    }
}

Contact 和 ContactRepository 在我的 Business Objects 项目中。ContactRepository 向 EF 查询联系人实体。

构建时,出现以下错误:

实体“SilverlightCRM.BusinessObjects.Contact”没有定义键。DomainService 操作公开的实体必须至少具有一个用 KeyAttribute 标记的属性。

如果我更改实体生成的代码以Contact.ContactID使用此处System.ComponentModel.DataAnnotation.Key()所述的属性装饰属性,我会在包含域服务的项目文件中出现另一个构建错误。<projectname>.g.cs

命名空间“系统”中不存在命名空间“数据”的类型(您是否缺少程序集引用?)

由于该<projectname>.g.cs文件是在构建时自动生成的,因此仅注释掉一行是行不通的,我将 System.Data 作为项目参考。

我在这里做错了什么?我认为我可以使用这种组织解决方案方面的模型,但是如果我想使用 Ria 服务,我是否必须进行更改?

4

2 回答 2

2

确保您从 RIA 服务文件夹(它的版本为 99.0.0.0)中引用 System.ComponentModel.DataAnnotations dll。

于 2009-11-06T20:05:37.380 回答
0

我发现的问题是我必须让我的 Ria 服务继承自 LinqToEntitiesDomainService 而不仅仅是域服务,因为传递的类型是来自 EF 的实体。

于 2009-11-22T16:51:13.887 回答