标签: ormlite-servicestack

ServiceStack和OrmLite中的异步支持

目前存在ServiceStack的异步分支,可以创建异步服务.但是为了获得异步的所有好处,所有IO绑定操作都应该是异步的,因此所有数据库请求也应该是异步的.我目前正在使用OrmLite和Postgresql,因此我想知道OrmLite是否支持异步查询/操作?如果没有,其他什么.Net Micro-Orms支持异步操作?

asynchronous async-await servicestack micro-orm ormlite-servicestack

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

如何指定ServiceStack.OrmLite参数长度

使用参数化查询似乎将参数的长度设置为传入的值的长度.

做类似的事情:

var person = Connection.Query<People>("select * from People where Name = @name", 
                                      new { name = "Fred"});
Run Code Online (Sandbox Code Playgroud)

使参数为NVARCHAR(4),因此具有不同长度的下一个查询会在缓存的计划上出现错过并创建一个新的查询.

如何更改它以便它只使用我指定的长度.

parameterized-query ormlite-servicestack

6
推荐指数
0
解决办法
748
查看次数

使用自定义查询在ID列表中选择其ID存在的项目

在短小精悍的你可以做一些事情:

var items = connection.Query<Items>("SELECT * FROM `@database`.`table`  WHERE `id` IN @idList;", new {database = DatabaseName, idList = someList.Select(n => n.id)});
Run Code Online (Sandbox Code Playgroud)

尝试在ormlite中做同样的事情:

var items = connection.Query<Items>("SELECT * FROM {0}`.`table`  WHERE `id` IN {1};", DatabaseName, someList.Select(n => n.id)});
Run Code Online (Sandbox Code Playgroud)

返回错误.Dapper创建查询:

SELECT * FROM `someDB`.`table` WHERE `id` IN (1,2,3,4);
Run Code Online (Sandbox Code Playgroud)

ormlite生成的地方:

SELECT * FROM `someDB`.`table` WHERE `id` IN [1,2,3,4];
Run Code Online (Sandbox Code Playgroud)

方括号在MySQL中无效.是不是可以在ormlite中做到这一点?

当我尝试使用匿名类列出参数时,如在dapper示例中,它找不到第二个参数.

c# mysql dapper ormlite-servicestack

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

ServiceStack OrmLite命令超时

使用IDbConnection.ExecuteSql时如何设置命令超时?

IDbConnection db = ConnectionFactory.OpenDbConnection();
db.ExecuteSql("...");
Run Code Online (Sandbox Code Playgroud)

如果我使用IDbCommand.ExecuteSql(见下文)方法,我可以设置命令超时,但我得到一堆关于弃用方法的警告.

IDbCommand comm = db.CreateCommand()
comm.CommandTimeout = 240;                    
comm.ExecuteSql("...");
Run Code Online (Sandbox Code Playgroud)

c# servicestack ormlite-servicestack

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

ServiceStack.OrmLite.JoinSqlBuilder是否允许构建简单查询

我想知道ServiceStack.OrmLite的JoinSqlBuilder是否允许构建以下简单查询:

SELECT * FROM Table1 a
  INNER JOIN Table2 b ON ...
  WHERE a.Column1 = 1 AND (a.Column2 = 2 OR b.Column3 = 3);
Run Code Online (Sandbox Code Playgroud)

问题是建立(a.Column2 = 2 OR b.Column3 = 3)一部分.JoinSqlBuilder有一个方法列表,例如Where<T>, And<T>, Or<T>允许为查询添加条件.

例如,如果我这样做:

builder
  .Join(...)
  .Where<Table1Poco>(a => a.Column1 == 1)
  .And<Table1Poco>(a => a.Column2 == 2)
  .Or<Table2Poco>(a => a.Column3 == 3)
  ...;
Run Code Online (Sandbox Code Playgroud)

我会得到:

... WHERE a.Column1 = 1 AND a.Column2 = 2 OR b.Column3 = 3;
Run Code Online (Sandbox Code Playgroud)

有没有办法a.Column1 = 1 AND (a.Column2 = 2 OR b.Column3 …

sql servicestack ormlite-servicestack

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

通用查询方法

尝试通过制作通用GET方法来减少代码中的重复.我正在使用OrmLite及其SQLExpressionVisitor更新...目标是传入lambda.我已经看过其他一些我希望会有所帮助的帖子,但到目前为止,没有去......显然问题是我如何在ev.Where声明中尝试评估标准,但解决方案正在逃避我. ..

提前谢谢...... -Lenny

public IQueryable<T> Get<T>(Predicate<T> criteria)
{
  using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
    {
     SqlExpressionVisitor<T> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<T>();
     ev.Where(x => criteria.Invoke(x))
     return db.Select(ev).AsQueryable();
    }
 }
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误......从范围''引用的'TW.Api.Models.CostCenter'类型的变量'x',但它没有定义

这是一个有效但不通用的代码示例....

public IQueryable<CostCenter> Get(Identity user)
{
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
      {
        SqlExpressionVisitor<CostCenter> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<CostCenter>();
        ev.Where(x => x.OrgId == user.OrgId);
        ev.Where(x => x.VisibilityStockpointId == user.StockpointId);``
        return db.Select(ev).AsQueryable();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我上面引用的模型......

[Alias("CostCenterDetail")]
public class CostCenter
{
    public Guid Id { get; set; }
    public Guid StockpointId { get; set; }
    public virtual Guid? …
Run Code Online (Sandbox Code Playgroud)

c# generics predicate ormlite-servicestack

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

超时已过期. - 在ServiceStack服务中使用Db

Db在ServiceStack服务中使用该属性来访问我的数据库,但我偶尔会从IIS中收到以下错误:

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

堆栈跟踪:

[InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.]
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +6371713
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +6372046
   System.Data.SqlClient.SqlConnection.Open() +300
   ServiceStack.OrmLite.OrmLiteConnection.Open() +44
   ServiceStack.OrmLite.OrmLiteConnectionFactory.OpenDbConnection() …
Run Code Online (Sandbox Code Playgroud)

servicestack ormlite-servicestack

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

ServiceStack OrmLite如何检测代码模型的更改并重新创建数据库?

是否有一种首选方法来检测代码模型中的更改并自动重新创建数据库?我不需要迁移数据,如果有变化,我可以完全删除所有表,从模型重新创建表,并在代码中填充初始数据集的新表.

与此相关:有没有办法使用ServiceStack的ORMLite版本获取数据库中所有表的列表?

目前我正在使用我自己的班级,但如果已经有了这方面的话,我不想发明一个轮子.

Web.config文件:

<connectionStrings>
    <add name="ApplicationServices" 
         connectionString="data source=(local);Integrated Security=SSPI;database=MyTestDatabase" 
         providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

DatabaseUtil:

public class DatabaseUtil
{
    private const int CURR_VERSION = 1;
    private static string connString = WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;

    public static void Init(Funq.Container container)
    {
        using (var db = connString.OpenDbConnection())
        {
            using (IDbConnection dbConn = connString.OpenDbConnection())
            {
                var createScript = !db.TableExists(typeof(ZatabaseConfig).Name.ToString());
                if (!createScript)
                {
                    var first = dbConn.FirstOrDefault<ZatabaseConfig>("");
                    createScript = first == null || first.Version < CURR_VERSION;
                }

                if (createScript)
                {
                    DropAndCreateDatabase(dbConn);
                }
            }
            // db.InsertAll(SeedData);
        }
    }

    private …
Run Code Online (Sandbox Code Playgroud)

servicestack ormlite-servicestack

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

有没有办法限制OrmLite选择使用Linq Expression返回的TOP行?

它似乎是OrmLite Select(谓词)函数,它将where子句中的所有内容(通过网络)带回来,然后在其上应用.Take(x).

我需要一种方法来只返回TOP x,这样结果更快,占用带宽更少.

有没有办法限制OrmLite select返回的TOP行(使用Linq表达式)?

servicestack ormlite-servicestack

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

是否可以使用ServiceStack和OrmLite进行模型优先ORM映射?

我本周末第一次发现ServiceStack,我发现它非常棒.因此,我已经在将所有项目转换为它.然后我遇到了一个小障碍.

我找不到任何文档,首先从数据库开始使用OrmLite,然后将现有模式映射到POCO.

我在代码优先发现了很多材料,但在模型优先没有.

有没有办法使用OrmLiite采用模型优先方法?

谢谢.

ormlite-servicestack

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