Это очень разные контексты. автономные сценарии .ss Sharp выполняются в контексте приложения Sharp , которое выполняется инструментами do tnet , которые имеют доступ ко всем ServiceStack реализация сборок. Поэтому, когда сценарий видит:
<!--
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
-->
, он создает ScriptContext
, предварительно настроенный с помощью # сценариев базы данных сценариев и OrmLiteConnectionFactory
, настроенный с помощью ServiceStack.OrmLite. SqlServer Поставщик и строка подключения.
В отличие от этого # Страницы сценария , выполняющиеся на веб-странице, имеют доступ только к контексту SharpPagesFeature
, настроенному в вашем приложении. Поэтому вам нужно настроить OrmLite в вашем AppHost как обычно, например:
container.AddSingleton<IDbConnectionFactory>(() =>
new OrmLiteConnectionFactory(connectionString, SqlServer2012Dialect.Provider));
Затем сделать Сценарии базы данных доступными для SharpPagesFeature
, например:
Plugins.Add(new SharpPagesFeature {
ScriptMethods = {
new DbScriptsAsync()
}
});
, который даст вашим страницам доступ к сценариям базы данных, которые будут использовать ваши зарегистрированные OrmLiteConnectionFactory
.
Sharp Apps - способ быстрого разрабатывать веб-приложения, созданные полностью с использованием #Script
, что позволяет использовать модель оперативной разработки с мгновенной обратной связью, поскольку ваше приложение не требует повторной компиляции или перезапуска. Приложения Sharp, как и ваши сценарии Sharp, запускаются
$ x new bare-webapp ProjectName
. Затем вы можете запустить приложение Sharp с x run
в каталоге приложения, например:
$ cd ProjectName
$ x run
Та же функциональность в Sharp Scripts также доступно для приложений Sharp, но вместо добавления конфигурации вашего приложения в начало вашего сценария вы вместо этого добавили бы ее в app.settings
, например:
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
Обратите внимание, с версии 5.7 #Script is переходит на использование JS Синтаксис оператора конвейера , поэтому теперь рекомендуется писать:
```code
{{
"select * from View drv
join [Project] p on drv.ProjectId = p.ProjectId
where DocumentId = 'GUID' "
|> dbSelect
|> map => {it.RecordId, it.Text, it.Name}
|> to => sqlMap
}}
sqlMap |> count
sqlMap |> textDump
```