Я только что получил 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 действительно плохоназвание для моей дозвуковой базы данных;)