Можно ли использовать ASP.NET Dynamic Data и SubSonic 3? - PullRequest
1 голос
/ 23 марта 2010

Можно ли использовать динамические данные ASP.NET с SubSonic 3 вместо классов Linq to SQL или Entity Framework? MetaModel.RegisterContext () вызывает исключение, если вы используете класс контекста, который генерирует SubSonic. Мне показалось, что я вспомнил пример с SubSonic / Dynamic Data еще до выпуска SubSonic 3, но сейчас не могу его найти. Кто-нибудь смог заставить это работать?

1 Ответ

2 голосов
/ 19 апреля 2010

Я только что получил Subsonic 3.0.0.4 ActiveRecord, работающий вчера вечером в Visual Studio 2010 с моей базой данных SQLite после небольшой работы, и я попытался задокументировать шаги, предпринятые здесь для вашего удобства.

Началодобавив Новый элемент -> Служба данных WCF к проекту, который вы используете для размещения вашего веб-приложения / веб-сервисов, затем измените его, как показано ниже в моем PinsDataService.svc.cs:

public class PinsDataService : DataService<PINS.Lib.dbPINSDB>
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.UseVerboseErrors = true;
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }
}

В этот момент ваша служба динамических данных, вероятно, работала бы, если бы вы полностью соответствовали всем соглашениям об именах баз данных, но мне не повезло.В моем шаблоне ActiveRecord.tt я должен был добавить следующие две строки перед объявлениями открытых частичных классов:

[DataServiceKey("<#=tbl.PrimaryKey #>")]
[IgnoreProperties("Columns")]
public partial class <#=tbl.ClassName#>: IActiveRecord {

Затем я добавил ссылки на System.Data и System.Data.Services.Client с последующим включением операторов использования для с использованием System.Data.Services и с использованием System.Data.Services.Common вверхняя часть шаблона ActiveRecord.tt .

Следующим шагом было использование реализации частичного класса IUpdateable из этого сообщения в блоге http://blogs.msdn.com/aconrad/archive/2008/12/05/developing-an-astoria-data-provider-for-subsonic.aspx и изменение public partial class dbPINSDB : IUpdatable для соответствиямое дозвуковое имя_базы_данных объявлено в Settings.ttinclude

Затем, чтобы использовать данные в отдельном клиентском приложении / библиотеке, я начал с добавления 'Service Reference' с именем PinsDataService в PinsDataService.svc из моегоклиентское приложение и отправился в город:

PinsDataService.dbPINSDB PinsDb = 
 new PinsDataService.dbPINSDB(new Uri("http://localhost:1918/PinsDataService.svc/"));
PinsDataService.Alarm activeAlarm = 
   PinsDb.Alarms.Where(i => i.ID == myAA.Alarm_ID).Take(1).ElementAt(0);

Обратите внимание, как я делаю запрос Where, который возвращает только 1 объект, но я бросил в Take (1) и затем ElementAt (0), потому что я продолжал получатьg ошибок, когда я пытался использовать SingleOrDefault () или First ()

Надеюсь, это поможет - также я уже знаю, что dbPINSDB действительно плохоназвание для моей дозвуковой базы данных;)

...