在客户端公开自定义服务器端实体框架属性

时间:2010-08-23 19:48:38

标签: silverlight wcf entity-framework wcf-ria-services

我正在使用WCF RIA Services制作Silverlight 4应用程序。

在服务器端(*.Web项目),我有一个从SQL Server数据库自动生成的实体模型。 在客户端,我有Visual Studio生成的域服务和代理对象,以便在Silverlight程序集中使用。

我想为模型添加自定义属性(最好是在服务器端)。 假设我有ContactCompanyAddress表,这些表由外键链接(但不一定是实际的外键约束)。我想添加一个属性,该属性将返回Contact的{​​{1}} CompanyAddress对象。

我一直在尝试通过创建一个部分类来扩展Contact类,并添加一个CompanyAddress { get; }属性。但是我不知道我需要对新属性做什么才能使它传播到客户端的自动生成代码。是否有必须添加到属性的特定属性?我是否必须在某处注册它以便代码生成器知道它?

这必须是导航属性还是更简单?

这是最好的做事方式,还是应该放弃扩展服务器端模型而只是在客户端做? (如果我在客户端执行此操作,则会遇到无法访问单个Entity派生类中的上下文对象的问题。)

1 个答案:

答案 0 :(得分:-1)

我从未使用过Silverlight或RIA服务,但我猜它会非常相似。当您创建EF模型并且您具有通过外键关联的实体(必须存在关系)时,与其他实体相关的每个实体将包含称为导航属性的内容。因此,在您的场景中,Contact应该包含名为Company和Company的属性,其中包含名为Address的属性。您可以通过使用Include on ObjectSet或延迟加载(在WCF中不是一个好主意)来指示EF加载这些导航属性。与您通过WCF向客户发送联系方式相比,公司和地址也将被发送。

你的方法有一个大问题。您的属性仅包含getter - 此类属性未序列化。