【问题标题】:Sharing a data model between Silverlight and WPF client在 Silverlight 和 WPF 客户端之间共享数据模型
【发布时间】:2012-06-21 14:37:01
【问题描述】:

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

例子:

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

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

WPF 客户端当前使用的数据模型,效果很好。现在我正在编写一个 Silverlight 客户端并使用相同的模型。要访问我使用 RIA 服务的数据库。在我不得不添加一些 RIA 注释,如 [Include] 之前,它在 silverlight 中运行良好(在上面的示例中进行了注释)。

问题是我们在数据模型中使用 .NET 4 客户端配置文件,我们无法更改它。但 RIA 注释位于 System.ServiceModel.DomainServices.Server 命名空间中,需要 .NET 4 或 .NET 4.5。

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

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

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

谢谢

【问题讨论】:

  • 如何为 WPF 项目中缺少的 Silverlight 属性创建虚拟属性,并为 Silverlight 项目中任何不需要的 WPF EF 属性创建虚拟属性?然后你只需用两者来注释所有内容,但它们会在每个项目中生成不同的元数据。
  • 问题在于 .NET 4 客户端配置文件中没有 RIA 注释所在的 .dll 文件。它需要 .NET 4 或 .NET 4.5。我正在寻找一种将 RIA 注释属性(如 [Include])与使用 .NET 4 客户端配置文件的数据模型“分离”的方法
  • 你似乎没有抓住重点......你可以很容易地创建自己的替换 [Include] 和其他属性,以允许它在任一平台上编译。如果您为属性类使用与 Microsoft 相同的命名空间,则即使 using 语句也是相同的。

标签: c# wpf silverlight ria


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果它适用于 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 {}
    }
    

    【讨论】:

    • 这就是问题所在,RIA 属性 [Include] 在 System.ServiceModel.DomainServices.Server 中,并且该命名空间在 .NET 4 Client Profile 中不可用。所以当我添加 [Include] 属性时该模型不再编译,因为它是 .NET 4 客户端配置文件,因此 [Include] 属性不存在
    • 我已经添加了您需要添加到 WPF 应用程序中以使其可编译的代码。这就是你想要的——可编译的代码,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2020-05-16
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多