标签: ormlite-servicestack

对 servicestack ormlite 中的所有结果进行分页

有没有办法对检索所有结果的 Ormlite 查询的结果进行分页。从这里的另一篇文章中,我发现了以下内容:

var result = db.Select<Group>( q => q.Where(predicate).Limit(skip:5, rows:10 ));
Run Code Online (Sandbox Code Playgroud)

但是,我想在没有“Where”子句的情况下进行查询。当省略这一段代码时,Limit 方法不再可用。如此有效,我想做的是这样的:

var result = db.Select<Group>().Limit(skip:5, rows:10);
Run Code Online (Sandbox Code Playgroud)

也许 Select 不是检索所有记录的正确方法?

c# paging ormlite-servicestack

2
推荐指数
1
解决办法
2043
查看次数

WithSqlFilter WITH (NOEXPAND) 提示在输出 SQL 中不正确

我正在尝试使用新的.WithSqlFilter()扩展方法将“WITH (NOEXPAND)”提示添加到针对我的索引视图生成的 select 语句中。但是,输出 SQL 将提示放在 WHERE 子句之后,而不是 FROM 子句之后。我的客户 DTO 也有[Alias("CustomerInfo")]. 这是预期的行为还是错误地生成了 SQL?

var customer = db.From<Customer>()
                 .Where(ci => ci.CustomerId == customerCode)
                 .WithSqlFilter(sql => IsSqlServer(db) ? sql + " WITH (NOEXPAND)" : sql);

return db.Single(customer);
Run Code Online (Sandbox Code Playgroud)

编辑:我需要 IsSqlServer 方法,因为我还有单元测试和其他使用 Sqlite 而不是 SQL Server 的代码,并且需要能够忽略基于连接的提示。

private bool IsSqlServer(IDbConnection db)
{
    var dialect = db.GetDialectProvider();

    return dialect is ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider ||
           dialect is ServiceStack.OrmLite.SqlServer.SqlServer2012OrmLiteDialectProvider ||
           dialect is ServiceStack.OrmLite.SqlServer.SqlServer2014OrmLiteDialectProvider ||
           dialect is ServiceStack.OrmLite.SqlServer.SqlServer2016OrmLiteDialectProvider;
}
Run Code Online (Sandbox Code Playgroud)

生成的SQL:

SELECT TOP 1 "CustomerId", "FirstName", …
Run Code Online (Sandbox Code Playgroud)

c# sql-server servicestack ormlite-servicestack

2
推荐指数
1
解决办法
225
查看次数

ServiceStack ormLite 更改 OrderBy

我正在努力做到以下几点:

var routines = con.Select<Table>(con.From<Table>().OrderBy(p => p.Field1).ThenBy(i => i.Field2));
Run Code Online (Sandbox Code Playgroud)

以上工作完美。但我想要一种更通用的方法并解析像 sort="field1,field2" 这样的字符串。我有以下代码:

int sortFieldCount = 0;
var itemsq = con.From<Table>();
foreach (var name in orderByField.Split(',')) {
if(sortFieldCount == 0)
  itemsq = sortOrderAscending ? itemsq.OrderBy(name) : itemsq.OrderByDescending(name);
else
   itemsq = sortOrderAscending ? itemsq.ThenBy(name) : itemsq.ThenByDescending(name);
sortFieldCount++;
}
Run Code Online (Sandbox Code Playgroud)

但是上面的代码似乎覆盖了第一个 OrderBy。有没有办法解决这样的问题?

谢谢

c# sql-order-by ormlite-servicestack

2
推荐指数
1
解决办法
800
查看次数

ServiceStack.OrmLite中是否可以使用拦截器?

我想在OrmLite中为数据库插入或更新创建一个钩子.

假设我想CreateDate为每个插入数据库的记录写一个a,LastUpdateDate为没有数据库触发器的每个更新写一个或类似的东西.我看不出这样做,如果我打电话的方式Db.Save<Anything>(anyList)anyList包含新增和更改的对象.

我知道NHibernate确实提供了拦截器,以便在每个对象被持久化之前为其注入自定义逻辑.有没有办法在ServiceStack.OrmLite中实现这一点?

c# servicestack ormlite-servicestack

1
推荐指数
1
解决办法
882
查看次数

ServiceStack在数据库事务中调用ResolveService

我最近将ServiceStack软件包升级到v4.0.46(从v4.0.36开始),我们的应用程序中有一些区域使用ResolveService来调用数据库事务中的另一个服务.以前这一切都运行良好,但升级到v4.0.46后,我们收到此错误:

连接必须有效且开放

调用者看起来像这样:

public class DeleteItemService: CustomerServiceBase
{
    public object Post(DeleteItem request)
    {
        WriteDb(conn => {
            using (var service = ResolveService<DeleteDocumentsService>()) {
                service.Post(new DeleteDocumentsRequest {
                    Ids = ids.ToArray()
                });
            }
            conn.Delete<Item>(request.Id);
        });

        return RespondSuccess<ResponseBase>();
    }
}
Run Code Online (Sandbox Code Playgroud)

DeleteDocumentsService看起来有点像这样

public class DeleteDocumentsService: CustomerServiceBase
{
    public ILog Log { get; set; }

    public PrivateStorage PMStorage { get; set; }

    public ResponseBase Post(DeleteDocumentsRequest request)
    {
        WriteDb(conn => {
            var link = conn.Select<DocumentLink>(l => l.DocumentStorageId == item.Id).FirstOrDefault();
            conn.Delete<DocumentStorage>(item.Id);
        });

        return RespondSuccess<ResponseBase>();
    }
Run Code Online (Sandbox Code Playgroud)

WriteDb只是数据库事务的包装器,如下所示:

public void …
Run Code Online (Sandbox Code Playgroud)

c# servicestack ormlite-servicestack

1
推荐指数
1
解决办法
180
查看次数

如何在ServiceStack.OrmLite中使用参数执行SQL语句?

我想在ServiceStack ormlite中使用paraemeters执行SQL语句

String.Format("SELECT OBJECT_ID(@name)", name);
Run Code Online (Sandbox Code Playgroud)

我想要最好的方式.

c# servicestack ormlite-servicestack

0
推荐指数
1
解决办法
3386
查看次数

为什么我不能将 ServiceStack OrmLite 中的 IDbTransaction 转换为 DbTransaction?

我正在使用ServiceStack.Ormlite v3.9.71并拥有以下代码段,我在其中打开 Ormlite SQLite 事务,假设我想在代码中其他地方的命令中使用此事务:

var connFactory = new OrmLiteConnectionFactory("ConnectionString", SqliteOrmLiteDialectProvider.Instance)
using (IDbConnection db = connFactory.Open()) // using var doesn't make a difference
using (IDbTransaction tran = db.OpenTransaction()) // using var or even db.BeginTransaction() doesn't make a difference
{
    // I do lots of boring stuff
    ...

    // Somewhere else in the code
    using (var cmd = db.CreateCommand())
    {
        cmd.Transaction = tran; // get an error
    }
}    
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我得到:

A first chance exception of type 'System.InvalidCastException' occurred in …
Run Code Online (Sandbox Code Playgroud)

c# sqlite ormlite-servicestack

0
推荐指数
1
解决办法
973
查看次数

如何从 ServiceStack ORMLite 检索数据注释别名(“表名”)和别名(“字段名”)?

我需要从此类“tblAccounts”和“AccountNumber”的数据注释中返回别名。它使用 ServiceStack ORM Lite。

[Alias("tblAccounts")]
    [Schema("task")]
    public class Account : IHasId<int>
    {
        [Alias("AccountNumber")]
        public int Id { get; set; }
        [Required]
        public int UnitId { get; set; }
        [Required]
        public int OldAccountNumber { get; set; }
        [Required]
    }
Run Code Online (Sandbox Code Playgroud)

c# data-annotations servicestack ormlite-servicestack

0
推荐指数
1
解决办法
2160
查看次数

如何将带有 ORMlite 的 byte[] 数组插入到图像列中

我的网络服务的一个子任务是在数据库中保存文件(以及一些元数据)。
Web服务基于ServiceStack及其ORMlite版本。

所以我创建了一个代表数据库中附件的小类:

public class Attachment {
    public string Description { get; set; }
    public string FileName { get; set; }
    public string Type { get; set; }
    public byte[] Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是实际文件

MemoryStream ms = new MemoryStream(webclient.DownloadData(...));
byte[] data = new byte[...];
ms.Read(data, 0, data.Length);

Attachment file = new Attachment() {
    /* all the other stuff */
    Data = data
};
Run Code Online (Sandbox Code Playgroud)

直到现在都没有问题... :)

现在我拥有了将这个文件放入数据库所需的一切。所以让我们开始吧......

dbCmd.Insert<Attachment>(file);
Run Code Online (Sandbox Code Playgroud)


还有问题...

SqlException: "Operand type …
Run Code Online (Sandbox Code Playgroud)

c# sql-server servicestack ormlite-servicestack

-7
推荐指数
1
解决办法
3083
查看次数