Что эквивалентно LINQ-to-SQL для Silverlight? - PullRequest
5 голосов
/ 28 января 2010

У меня есть приложение WPF , которое использует LINQ-to-SQL в локальном .MDF файле. Это решение просто, легко и эффективно , т. Е. Я настраивал свою модель один раз, а затем считывал / записывал данные в любом месте через 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?

В поисках я обнаружил взрыв терминов:

  • Службы RIA WCF, Службы данных WCF (Службы данных ADO.NET, Astoria), Инструментарий служб данных
  • .NET RIA Services
  • OData (Даллас)
  • GData
  • REST, на основе REST, REST-подобный, REST-вдохновленный
  • XML, JSON, RDF + XML
  • веб-сервисы, SOA
  • облачные службы, Azure, SQL Azure, платформа служб Azure

Все, что я хочу сделать, это:

  • создать файл .mdf
  • использовать инструмент, подобный LINQ-to-SQL, для создания веб-слоя данных (REST?) и т. Д.
  • ftp .mdf файл и классы до моего ASP.NET веб-хостинга
  • запись клиентов Silverlight , которые читают и записывают в этот источник данных с помощью LINQ

Ответы [ 5 ]

4 голосов
/ 28 января 2010

Сосредоточьтесь на изучении RIA Data Services или WCF Data Services. Он преобразует ваши запросы LINQ в Silverlight в запросы REST и избавляет вас от написания части кода инфраструктуры. Идея состоит в том, что ваше SL-приложение связывается только с веб-сервисами, у вас нет доступа к физической БД, как, например, когда вы используете ORM (L2S). В SL вы находитесь в песочнице браузера, что не позволяет вам получить доступ к файловой системе, в том числе к файлам БД.
Другой подход заключается в написании веб-сервиса и предоставлении данных через него (GetArticleByID), а затем вы используете эти сервисы из Silverlight. Затем вы используете LINQ для итерации по извлеченным, загруженным данным.

3 голосов
/ 28 января 2010

Вот что нужно сделать -

  1. Создание приложения Silverlight с использованием Visual Studio. Вы получите два проекта: один с Silverlight XAML, а другой - веб-приложение для его размещения.

  2. В веб-приложении добавьте файл DBML (Linq-2-SQL). Настроить как обычно

  3. В веб-приложении добавьте службу WCF с поддержкой Silverlight

  4. В службе WCF определите некоторые методы, которые обращаются к контексту данных L2S

  5. В проекте Silverlight перейдите, чтобы добавить ссылку на службу, нажмите «обнаружить» и добавьте службу WCF в

  6. Создание службы и доступ к вашим методам

Звучит немного сложно, но на практике довольно просто.

1 голос
/ 28 января 2010

Если вы хотите разработать обычное LOB-приложение (Line of Business), вы должны следовать подходу, используя интерфейс веб-службы для вашей базы данных. Службы RIA или служба данных WCF - это текущая технология RAD (Rapid Application Development) от Microsoft, которая облегчает эту задачу.

Если вы говорите о специальном сценарии, который вам нужен: Silverlight 4, когда работает браузер, теперь может общаться с COM-серверами в Windows. Общение с базами данных описано в этом обширном сообщении в блоге: Передовые возможности Silverlight 4 Com .

Если вы ищете способ манипулировать файлами, похожими на базы данных, вы можете взглянуть на проект csharp-sqlite . Я думаю, что он компилируется для Silverlight без особых сложностей (быстрое и грязное подтверждение концепции здесь: Подтверждение концепции csharp-sqlite в Silverlight ). С его помощью вы можете создавать файл базы данных и управлять им в изолированном файловом хранилище пользователя в обычном приложении Silverlight, а затем загружать его в любое место.

1 голос
/ 28 января 2010

Я настоятельно рекомендую вам убрать час из своего расписания и просто посмотреть это видео: -
нетто-RIA-сервисов интро

Фактически, потратьте 2 часа и работайте вместе с видео, создавая свою собственную копию создаваемого приложения.

1 голос
/ 28 января 2010

Не возможно. Silverlight не может получить доступ к базам данных напрямую. Между ними необходим какой-то слой веб-сервиса. Я думаю, что WCF и RIA Services наиболее широко используются.

...