标签: ormlite-servicestack

如何从ormlite SaveAll()调用获取ID

我正在使用ORMLite来保存许多对象,类似于:

var graphs = Builder<UserGraph>.CreateListOfSize(10)
            .And(x => x.UserId = User.Id)
            .Build();

Db.SaveAll(graphs);
Run Code Online (Sandbox Code Playgroud)

有没有办法让每个对象的id属性自动设置.如果没有,有没有办法获取所有插入对象的ID?

c# ormlite-servicestack

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

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

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

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

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

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

谢谢.

ormlite-servicestack

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

在使用NUnit对ServiceStack.OrmLite进行单元测试时,如何将Db注入Service类?

我对使用ServiceStack创建的一些服务类编写单元测试(使用NUnit)感兴趣,使用"New API"(继承自ServiceStack.ServiceInterface.Service).当使用AppHost在ASP.NET应用程序中托管时,服务的Db属性是正确自动连接的,但是当在该环境之外运行时,我似乎无法弄清楚正确的技术.我在ServiceStack中看到了各种与测试相关的命名空间和类,但是找不到注入服务的Db属性的明确示例,而不是简单地直接设置连接工厂然后调用各种IDbConnection扩展方法(Insert ,选择等).

我已经尝试让我的测试类继承自ServiceStack.ServiceInterface.Testing.TestBase并重写其Configure方法以注册IDbConnectionFactory(使用":memory:"),以及OrmLiteConfig.DialectProvider = SqliteDialect.Provider;在我的TestFixtureSetUp中设置,但是当我继续获得NullReferenceException时调用我的服务方法(在ServiceStack.ServiceInterface.Service.get_Db()处).似乎Funq容器没有自动连接任何东西.

SQLite本身已正确设置,我可以通过更简单的单元测试来确认,这些单元测试绕过我的服务类并直接执行直接的IDbConnection调用.

我错过了什么?

编辑

看来,单元测试ServiceStack服务需要主机和客户端的存在,虽然它看起来像有一些方法可以设置它,以避免序列化成本(使用DirectServiceClient,如图所示这里) -虽然我没有成功地让我的工作在我的情况下.我设法使用AppHostHttpListenerBase方法(参见此处)使用它,尽管它更像是集成测试而不是单元测试(因此速度较慢).

nunit inversion-of-control ormlite-servicestack

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

使用 SQLite 时如何让 ServiceStack.OrmLite 强制执行外键?

根据另一个SO 答案,SQLite 似乎不会自动强制执行外键关系,并且必须在每个连接中显式启用它。这是ServiceStack.OrmLite报告的问题。我自己使用 ServiceStack.OrmLite 3.9.33 和 SQLite 1.0.84 重现了这种行为,其中单元测试成功(允许删除具有外键引用的记录),但实际应用程序(合法地)失败。

我不清楚的是如何/在哪里执行必要的“PRAGMAforeign_keys = ON;” SQL 命令,以便它适用于我的 SQLite 单元/集成测试的任何连接,但不适用于我的主 SQL Server 连接。理想情况下,它似乎是 IDbConnectionFactory 注册的一部分。

有人可以帮忙吗?

编辑:级联删除将是处理这种情况的另一种方法,但是尽管使用ForeignKey属性在我的FK列上正确设置了这一点,但在与SQLite一起使用时,ServiceStack.OrmLite似乎并不遵守这一点(请注意此处),尽管后者支持为了它。这可能与最初的问题有关,默认情况下禁用 SQLite 的 FK 强制,如果首先启用它,它将正常工作。

sqlite servicestack ormlite-servicestack

5
推荐指数
0
解决办法
473
查看次数

Ormlite Where-Contains失败

我正在尝试使用子句Enumerable.Contains内部查询我的数据库SqlExpressionVisitor.Where.编译lambda时,我得到一个空引用异常.

当访问者进入foreach (Object e in inArgs)(当前行1067)内部时SqlExpressionVisitor.VisitArrayMethodCall,它会因为inArgs为空而窒息.以下是导致错误的示例.我不太了解lambda /表达式,知道为什么会发生这种情况.

所以我的问题是,我没有Where正确使用该条款或这是一个错误吗?

class Program
{
    static void Main(string[] args)
    {
        var connectionFactory = new OrmLiteConnectionFactory(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Database1.mdf;Integrated Security=True;User Instance=True", SqlServerDialect.Provider);
        SetupDb(connectionFactory);           

        using (var db = connectionFactory.OpenDbConnection())
        {
            var numbersToSelect = new int[2] { 1, 2 };
            db.Select<SomeObject>(e => e.Where(o => numbersToSelect.Contains(o.Number)));
        }
    }

    static void SetupDb(IDbConnectionFactory connectionFactory)
    {
        using (var db = connectionFactory.OpenDbConnection())
        {
            db.DropTable<SomeObject>();
            db.CreateTable<SomeObject>();
            db.Insert(new SomeObject { Number = 1 …
Run Code Online (Sandbox Code Playgroud)

servicestack ormlite-servicestack

5
推荐指数
2
解决办法
1586
查看次数

DateTime.SpecifyKind(DateTimeKind.Utc)是否有OrmLite选项?

有没有指定我想办法所有的的DateTime是OrmLite物化设置为UTC样S'

DateTime当插入一行时,我通过存储过程在我的数据库中存储了很多s:

insert [Comment] (
  Body
, CreatedOn
) values (
  @Body
, getutcdate()
);
Run Code Online (Sandbox Code Playgroud)

当我通过ormlite中的select语句检索值时,日期时间以Unspecified实物形式出现(我相信它被解释为本地时区):

var comments = db.SqlList<Comment>("select * from [Comment] where ... ");
Run Code Online (Sandbox Code Playgroud)

我宁愿单独设置每个DateTime对象:

foreach (var comment in comments) {
    comment.CreatedOn = DateTime.SpecifyKind(comment.CreatedOn, DateTimeKind.Utc);
}
Run Code Online (Sandbox Code Playgroud)

我发现了这个问题,但我认为这不是我要求的:
servicestack ormlite sqlite DateTime在插入时调整TimeZone

也找到了这个拉取请求,但设置SqlServerOrmLiteDialectProvider.EnsureUtc(true)似乎也没有.

sql-server utc ormlite-servicestack

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

ServiceStack OrmLite 和事务

我正在尝试使用 ServiceStack OrmLite 在事务内执行 sql。下面的代码适用于 Sqlite,但不适用于 SqlServer。使用 SqlServer 我收到以下错误:

当分配给命令的连接处于挂起的本地事务中时,ExecuteScalar 要求该命令具有事务。命令的 Transaction 属性尚未初始化。

这段代码有问题吗?

using (var trans = Db.BeginTransaction())
{
    try
    {
        foreach (myObject in myObjects)
            Db.Insert<MyObject>(myObject);
        trans.Commit();
    }
    catch (Exception ex)
    {
        trans.Rollback();
        throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)

sql-server transactions ormlite-servicestack

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

如何在ServiceStack OrmLite中加入2个表并选择这两个类?

我想在ServiceStack OrmLite中进行一个简单的SQL连接,并将两个表作为相应的.NET对象.

在LINQ-to-Entities中,它将是这样的:

Claim.Join(Policy, c => c.PolicyId, p => p.Id, (c, p) => new { Claim = c, Policy = p })
Run Code Online (Sandbox Code Playgroud)

这会给我一个匿名类型ClaimPolicy属性.

我查看了OrmLite 高级连接示例,但只选择了每种类型的一些属性为第3类对象(FullCustomerInfo).我不想在另一个对象中重复我的所有属性,我只想使用现有的对象.

实际上,查询可能要复杂得多,例如

Claim.Join(Policy, c => c.PolicyId, p => p.Id, (c, p) => new { Claim = c, Policy = p })
    .Where(o => o.Policy.Something > o.Claim.Something)
    .Select(o => o.Claim.SomethingElse)
Run Code Online (Sandbox Code Playgroud)

...等等,但即使OrmLite可以在SQL中进行连接,我也必须在内存中完成剩下的工作,这将是一个良好的开端.

ormlite-servicestack

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

OrmLite查询从2个连接表中的每一个中选择一些列

本评论之后,我如何进行连接两个或多个表的ServiceStack OrmLite查询并从每个表中返回一些列?

以OrmLite Does_only_populate_Select_fields_wildcard单元测试为例,我想做这样的事情:

public class DeptEmployee
{
    [PrimaryKey]
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [References(typeof(Department2))]
    public int DepartmentId { get; set; }

    [Reference]
    public Department2 Department { get; set; }
}

public class Department2
{
    [PrimaryKey]
    public int Id { get; set; }
    public string Name { get; set; }
}

var q = db.From<DeptEmployee>()
    .Join<Department2>()
    .Select<DeptEmployee, Department2>((de, d2) => new[] …
Run Code Online (Sandbox Code Playgroud)

ormlite-servicestack

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

与ServiceStack左连接.OrmLite返回一个空对象而不是null

我创建了一个存储库,其中包含我要执行的操作的完整示例

我有以下架构:

class Order
{
    public int OrderId { get; set; }
}

class LineItem
{
    public int LineItemId { get; set; }
    public int OrderId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用ServiceStack.OrmLite使用以下代码将Order与LineItem联接起来:

var query = db.From<Order>()
              .LeftJoin<LineItem>()
              .Where(o => o.OrderId == 1);

var results = db.SelectMulti<Order, LineItem>(query);
Run Code Online (Sandbox Code Playgroud)

SelectMulti()返回List<Tuple<Order, LineItem>>。当订单中没有订单项时,我将返回new LineItem()而不是null

我希望能null回来,所以我可以说出“此订单不存在任何订单项”和“此订单包含具有默认值的订单项”之间的区别。

可以检查订单项OrderId是否等于订单的OrderId,但理论上我可以将订单的订单号OrderId设为0,因此在这种情况下我将无法分辨。

是否有更好的方法与OrmLite保持连接?

c# servicestack ormlite-servicestack

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