在Silverlight和WPF客户端之间共享数据模型

时间:2012-06-21 14:37:02

标签: c# wpf silverlight ria

我正在使用EntityFramework Code First 5,我有我的数据模型。

示例:

[Table("Contract"]]
public class Contract
{
    ...

    [ForeignKey("SomeKey")]
    //[Include]
    public virtual BusinessPartner BP
    {
    ...
    }
}

WPF客户端目前使用数据模型,效果很好。现在我正在编写Silverlight客户端并使用相同的模型。要访问数据库,我使用的是RIA服务。它在silverlight中工作得很好,直到我不得不添加一些像[Include]这样的RIA注释(在上面的例子中有注释)。

问题是我们在数据模型中使用.NET 4 Client Profile而我们无法更改它。但RIA注释位于System.ServiceModel.DomainServices.Server命名空间中,该命名空间需要.NET 4或.NET 4.5。

因此,如果我添加RIA [Include]注释,模型就不再编译了。

有没有办法在.NET 4 Client Profile中使用RIA注释属性,以便在WPF和Silverlight客户端中使用相同的数据模型?

我已经阅读过有关在XML文件中定义这些RIA属性的内容,但我找不到示例..

谢谢

2 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。我使用了FluentMetadata,Fluent API用于WCF RIA服务,使我能够在不同的程序集中定义注释。这正是我所需要的。有关FluentMetadata的更多信息,请参阅以下link

答案 1 :(得分:0)

如果它适用于WPF并且在Silverlight中正常工作,那么你唯一需要的就是为你的WPF应用程序创建自己的虚拟属性,它将模仿来自RIA的IncludeAttribute来编译它。要实现这一点,您需要将属性放在RIA中的相同名称空间中。

namespace System.ServiceModel.DomainServices.Server 
{
    // Just put this into your WPF app :)
    [AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = true, Inherited = true)]
    public class IncludeAttribute : Attribute {}
}