【问题标题】:What is the equivalent of LINQ-to-SQL for Silverlight?Silverlight 的 LINQ-to-SQL 等效项是什么?
【发布时间】:2011-01-10 08:25:57
【问题描述】:

我有一个 WPF 应用程序,它在本地 .MDF 文件上使用 LINQ-to-SQL。此解决方案简单、容易且有效,即我设置了一次模型,然后通过 LINQ 在任何地方读取/写入数据:

        using (var db = Datasource.GetContext())
        {
            oldItem = (from i in db.Infos
                       where i.Id == TheId
                       select i).SingleOrDefault();
            CreateForm(db, FormBase, oldItem, Button_Save);
        }

对于 Silverlight 应用程序来说,这相当于什么?

搜索我发现大量的术语:

  • WCF RIA 服务、WCF 数据服务(ADO.NET 数据服务、Astoria)、数据服务工具包
  • .NET RIA 服务
  • OData(达拉斯)
  • GData
  • REST、基于 REST、类 REST、受 REST 启发
  • XML、JSON、RDF+XML
  • Web 服务、SOA
  • 基于云的服务、Azure、SQL Azure、Azure 服务平台

我想做的就是:

  • 创建 .mdf 文件
  • 使用一些类似 LINQ-to-SQL 的工具生成支持 Web 的 (REST?) 数据层等。
  • ftp .mdf 文件和类到我的 ASP.NET 网络托管服务
  • 编写 silverlight 客户端,使用 LINQ 读取和写入此数据源

【问题讨论】:

    标签: linq wcf silverlight data-access-layer wcf-ria-services


    【解决方案1】:

    专注于学习 RIA 数据服务或 WCF 数据服务。它将您在 Silverlight 中的 LINQ 查询转换为 REST 请求,并使您免于编写一些基础架构代码。整个想法是您的 SL 应用程序仅与 Web 服务通信,您无权访问物理数据库,例如当您使用某些 ORM (L2S) 时。在 SL 中,您位于浏览器的沙箱内,这会阻止您访问文件系统,包括 db 文件。
    另一种方法是编写 Web 服务并通过它公开数据 (GetArticleByID),然后您从 Silverlight 使用该服务。然后,您使用 LINQ 迭代获取、加载的数据。

    【讨论】:

    • +1 "RIA 和 WCF 数据服务",但是请求不一定是 REST,但这不是开发人员需要过多担心的。
    • 带来最相关点击的术语是“WCF RIA 服务”,例如silverlight.net/getstarted/riaservices
    • 很难跟上这个框架的不断重命名。很久以前就有 Astoria,它是通过 WCF Web 服务对 IQueryable 数据进行 REST 样式的接口。最重要的是,他们最近为 Silverlight 构建了 WCF RIA 服务,以便通过 LINQ 查询(WCF 数据服务)快速轻松地使用 Astoria。但是,RIA 服务中有一些我真的不喜欢的概念,并记得我在 ASPX 文件中的 ASP.NET SqlDataSource 控件和其中的 SQL 查询!将您的数据访问逻辑保存在单独的松散耦合层中,而不是 UI 声明文件中!
    【解决方案2】:

    这是怎么做的-

    1. 使用 Visual Studio 创建 Silverlight 应用程序。您将获得两个项目,一个使用 Silverlight XAML,另一个使用 Web 应用程序来托管它。

    2. 在 Web 应用程序中,添加您的 DBML (Linq-2-SQL) 文件。正常配置

    3. 在 Web 应用程序中,添加启用 Silverlight 的 WCF 服务

    4. 在WCF服务中,定义一些访问L2S数据上下文的方法

    5. 在 Silverlight 项目中,进入添加服务引用,点击“发现”并添加 WCF 服务

    6. 实例化服务并访问您的方法

    听起来有点复杂,但在实践中非常简单。

    【讨论】:

    • +1 这是我正在寻找的那种穿越丛林的建议,会尝试
    • 让我知道进展如何 - 很高兴提供进一步的建议。我已经做过几次 Silverlight 到 linq 的这种事情了……
    • 在第 3 步中,当我将启用 silverlight 的 wcf 服务添加到 Web 应用程序时,我得到“对象引用未设置为对象的实例”,虽然它似乎创建了服务,但有任何建议那里?
    • 然后在第 5 步中显示“在localhost:49417/Test.svc 下搜索服务时出错”
    • 关于第3步,它给你一个行参考吗?什么代码有问题。关于第 5 步,您可能需要在添加服务之前重新编译整个解决方案
    【解决方案3】:

    不可能。 Silverlight 无法直接访问数据库。两者之间需要某种 Web 服务层。我认为 WCF 和 RIA 服务是使用最广泛的。

    【讨论】:

    • 对,我正在寻找可以为我生成这个 Web 服务层的东西,就像 LINQ-to-SQL 为我生成数据模型类一样,所以我不必考虑它,只需“通过 linq 使用它”
    • +1 指出我想生成一个 Web 服务层,而不是数据模型类,改变了这一点。
    【解决方案4】:

    我强烈建议您在日程安排中腾出一个小时,然后观看此视频:-
    net-ria-services-intro

    事实上,花 2 个小时,一边制作视频,一边制作您自己正在构建的应用的副本。

    【讨论】:

      【解决方案5】:

      如果您想开发常规的 LOB(业务线)应用程序,那么您应该遵循使用 Web 服务接口连接数据库的方法。 RIA 服务或 WCF 数据服务是 Microsoft 当前的 RAD(快速应用程序开发)技术,用于简化此任务。

      如果您正在谈论您需要的特殊场景:Silverlight 4 在浏览器用完时现在可以与 Windows 上的 COM 服务器通信。这篇博文描述了如何与数据库对话:Cutting Edge Silverlight 4 Com Features

      如果您正在寻找一种操作类似数据库的文件的方法,您可以查看csharp-sqlite 项目。我认为它可以为 Silverlight 编译毫不费力(这里是快速而肮脏的概念证明:Proof of Concept csharp-sqlite in Silverlight)。有了它,您可以在常规 Silverlight 应用程序的用户隔离文件存储中创建和操作数据库文件,然后将其上传到您想要的任何地方。

      【讨论】:

      • +1 用于在用户的隔离存储中运行 sqlite 数据库的想法,聪明
      • 这是一篇描述silverlight中sqlite的文章:itwriting.com/blog/…
      猜你喜欢
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多