ServiceStack数据库的第一个例子

时间:2014-06-25 04:32:00

标签: servicestack

我想使用现有数据库(SQL Server)使用Servicestack启动新项目。我非常喜欢并且还学习了复杂的servicstack教程。我想请求一些帮助,因为我正面临一些挑战,因为我是新手,我是寻找示例/教程让我开始使用现有的表映射POCO。一个表和一个服务请求的非常基本的例子足以让我开始。

由于

2 个答案:

答案 0 :(得分:7)

首先要了解OrmLite功能,我建议您阅读 OrmLite's Homepage 上的文档。

要开始使用ServiceStack中的OrmLite,首先从NuGet安装首选的OrmLite提供程序,例如使用InMemory数据库,只需从NuGet安装Sqlite:

Install-Package ServiceStack.OrmLite.Sqlite.Mono

* OrmLite.Sqlite.Mono 支持Windows和Mono,对于仅限Windows的x86 / x64 Sqlite,您可以使用OrmLite.Sqlite.Windows。对于SQL Server,请安装OrmLite.SqlServer

然后要在ServiceStack中使用OrmLite,您只需要使用要使用的RDBMS提供程序和连接字符串注册数据库连接工厂:

public void Configure(Container container)
{
    container.Register<IDbConnectionFactory>(c => 
        new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider));
}

默认情况下,OrmLite支持将 1:1 映射到RDBMS表的POCO,因此这是一个简单的类,如:

public class Simple
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? Age { get; set; }
}

可以使用:

创建
using (var db = container.Resolve<IDbConnectionFactory>().Open())
{
    //Drops (if exists) and re-creates SimpleTable
    db.DropAndCreateTable<Simple>();  
}

这将创建一个具有以下定义的RDBMS表:

CREATE TABLE "Simple" 
(
  "Id" INTEGER PRIMARY KEY, 
  "Name" VARCHAR(8000) NULL, 
  "Age" INTEGER NULL 
); 

您可以进一步使用属性来自定义表的创建方式,例如:

[Alias("CustomTable")]
public class Simple
{
    [AutoIncrement]
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Alias("CustomAge")]
    public int Age { get; set; }
}

将生成以下SQL:

CREATE TABLE "CustomTable" 
(
  "Id" INTEGER PRIMARY KEY AUTOINCREMENT, 
  "Name" VARCHAR(100) NOT NULL, 
  "CustomAge" INTEGER NOT NULL 
); 

OrmLite还将继续在未来的API中使用自定义别名。

在ServiceStack中,您可以从Db基类中的ADO.NET Service连接访问OrmLite。由于OrmLite表只是POCO,如果您希望将它们重新用作请求DTO(尽管它是recommended to have purpose-specific Request DTO's),您可以使用它。

E.g。如果提供Simple,则此ServiceStack Service返回单Id行,否则返回所有Simple条目:

public class MyServices : Service
{
    public object Any(Simple request)
    {
        return request.Id != default(int)
            ? Db.SingleById<Simple>(request.Id)
            : Db.Select<Simple>();
    }
}

大多数ServiceStack example projects使用OrmLite,为了开始,我建议首先阅读这些记录良好的示例:

答案 1 :(得分:2)

相关问题