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