如何构建ServiceStack.Host.Mvc项目?

时间:2014-02-14 22:42:28

标签: asp.net-mvc-4 servicestack

我正试图在VS2012中测试ServiceStack for MVC 4应用程序:

  • 我开始一个新项目,选择空的MVC4。
  • 使用包管理器安装MVC Power Pack (PM> Install-Package ServiceStack.Host.Mvc)

但是,即使遵循了MvC的特殊说明,我也会立即在构建时遇到以下3个错误。

  •   

    非泛型方法'ServiceStack.ContainerTypeExtensions.Register(Funq.Container,object,System.Type)'不能与类型参数一起使用

  •   

    无法将lambda表达式转换为'ServiceStack.Data.IDbConnectionFactory'类型,因为它不是委托类型

  •   

    当前上下文中不存在名称“SqlServerDialect”

它们都与AppHost.cs

中的以下代码相关
// Requires ConnectionString configured in Web.Config
var connectionString = ConfigurationManager.ConnectionStrings["AppDb"].ConnectionString;
container.Register<IDbConnectionFactory>(c =>
    new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider));

2 个答案:

答案 0 :(得分:2)

检查以确保依赖包在您的引用中并在必要时使用。

  <dependency id="WebActivator" version="1.5" />
  <dependency id="ServiceStack.Mvc" version="4.0" />
  <dependency id="ServiceStack.Server" version="4.0" />
  <dependency id="ServiceStack.OrmLite.SqlServer" version="4.0" />

https://github.com/ServiceStack/ServiceStack/blob/master/NuGet/ServiceStack.Host.Mvc/servicestack.host.mvc.nuspec

拉出的列表

答案 1 :(得分:2)

任何示例服务都没有使用该代码,因此您可以将其注释掉,例如:

//container.Register<IDbConnectionFactory>(c =>
//    new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider));

在ServiceStack中使用OrmLite

但是如果您想将SqlServer与ServiceStack的OrmLite一起使用,您可以从NuGet安装它:

PM> Install-Package ServiceStack.OrmLite.SqlServer

使用替代RDBMS

否则,您可以安装首选的RDBMS解决方案,例如对于PostgreSQL,请安装:

PM> Install-Package ServiceStack.OrmLite.PostgreSQL

您可以将其更改为使用PostgreSQL提供程序,例如:

container.Register<IDbConnectionFactory>(c =>
    new OrmLiteConnectionFactory(connectionString, PostgreSqlDialect.Provider));

在ServiceStack服务和Razor视图中查询数据库

然后,您可以在服务或剃刀视图中使用 Db 数据库,如:

在你的AppHost中:

using (var db = container.Resolve<IDbConnectionFactory>().Open()) {
    Db.CreateTableIfNotExists<TestDb>();
}

在ServiceStack服务(或Razor Views)中使用 Db 属性:

public object Any(TestDb request)
{
    Db.Insert(request);
    return Db.SingleById<TestDb>(request.Id);
}

* TestDb可以是任何POCO,请求DTO等