ServiceStack数据库的第一个例子

Zay*_*yar 4 servicestack

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

谢谢

myt*_*thz 7

首先要了解OrmLite功能,我建议您阅读OrmLite主页上的文档.

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

Install-Package ServiceStack.OrmLite.Sqlite.Mono
Run Code Online (Sandbox Code Playgroud)

*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));
}
Run Code Online (Sandbox Code Playgroud)

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

public class Simple
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

可以创建:

using (var db = container.Resolve<IDbConnectionFactory>().Open())
{
    //Drops (if exists) and re-creates SimpleTable
    db.DropAndCreateTable<Simple>();  
}
Run Code Online (Sandbox Code Playgroud)

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

CREATE TABLE "Simple" 
(
  "Id" INTEGER PRIMARY KEY, 
  "Name" VARCHAR(8000) NULL, 
  "Age" INTEGER NULL 
); 
Run Code Online (Sandbox Code Playgroud)

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

[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; }
}
Run Code Online (Sandbox Code Playgroud)

这将生成以下SQL:

CREATE TABLE "CustomTable" 
(
  "Id" INTEGER PRIMARY KEY AUTOINCREMENT, 
  "Name" VARCHAR(100) NOT NULL, 
  "CustomAge" INTEGER NOT NULL 
); 
Run Code Online (Sandbox Code Playgroud)

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

在ServiceStack中,您可以从基类中的ADO.NET Db连接访问OrmLite Service.由于OrmLite表只是POCO,如果您希望将它们重新用作请求DTO(尽管建议使用特定于目的的请求DTO).

例如,Simple如果Id提供了此ServiceStack Service,则返回单行,否则返回所有Simple条目:

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

大多数ServiceStack示例项目都使用OrmLite,为了开始,我建议首先通过这些记录良好的示例: