标签: ormlite-servicestack

如何在ServiceStack OrmLite中检索自动递增的Id?

对于具有标识的表:

    [AutoIncrement]
    public int Id { get; set;}
Run Code Online (Sandbox Code Playgroud)

将新行插入数据库时​​,检索对象Id的最佳方法是什么?

例如:

db.Insert <>(new User());

插入后Id的值为0,但在数据库中显然不是这种情况.我能看到的唯一可能性如下:

Id = (int)db.GetLastInsertId();
Run Code Online (Sandbox Code Playgroud)

但是我不相信这是一个安全的号召.如果同时发生100个插入,则可能会返回另一个插入的Id.在EF中进行插入时,将为您设置ID.

有谁知道最好的方法吗?

sql-server servicestack ormlite-servicestack

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

对OrmLite的SQL Server特定类型支持

我刚刚学会了一种天才类型,它可以简化我的大部分工作,但看起来我的首选ORM无法识别它.

是否有一种解决方法让ServiceStack OrmLite HierarchyId在SQL Server中识别?有关要修改哪些文件的任何建议以及任何提示如何继续?

编辑:

这是对问题的更好说明.我有以下课程:

public class MyClass
{
    public int Id { get; set; }
    public SqlHierarchyId HierarchyId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

SqlHierarchyId是一种自定义SQL Server数据类型.OrmLite将为它生成以下类:

第一个MyClass渲染

有趣的是,我可以使用[StringLength(255)]属性上的属性,它将获得varchar(255)类型:

第二个MyClass渲染

我在这里手动更改了表,并添加了列数据类型来展示差异.请注意第三列的数据类型:

SqlHierarchyId

具有varchar表示与其他DBMS完全一样,因为它可以在C#中转换,但是对于SQL Server,最好使它与相应的数据类型匹配.这将使视图的创建更容易(由于hierarchyid数据类型的内置函数).

我知道EF4不支持这种类型(不确定5).我还浏览了GitHub上的OrmLiteDialectProviderBase.cs文件,我可以看到支持的ADO.NET数据类型列表.

我的简单问题是:这是ADO.NET的一个强大限制,还是在OrmLite中可以看到这个?如果提出任何建议,我愿意帮助扩展这一部分.

c# sql sql-server ormlite-servicestack

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

具有多个数据库服务器的ServiceStack OrmLite

我正在围绕servicestack框架构建一个应用程序,并且需要能够访问Oracle和MS Sql Server中的数据.这可能是使用ORMLite,似乎我只能为App设置一个方言或者我错过了什么?

sql-server oracle11g ormlite-servicestack

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

将模式名称与SQL Server和ServiceStack.OrmLite一起使用

任何人都知道如何应用正确的Alias属性来查询具有模式名称的表?

我有一张叫做的桌子accounts.register.我已经尝试使用[Alias("accounts.register")]Register类的类装饰器属性,但这不起作用.

如果我将模式更改为dbo然后我可以删除别名,一切正常.不幸的是,我有一个遗留系统有很多模式,所以我需要这个工作.

sql-server ormlite-servicestack

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

急于加载ormlite servicestack

这是实体框架:

var department = _context.Departments
                .Include(dep => dep.Employees.Select(emp => emp.ContactTypes))
                .SingleOrDefault(d => d.Id == departmentId);
Run Code Online (Sandbox Code Playgroud)

在这里,我希望返回一个部门,其中包含所有相关员工以及每个员工的所有联系类型.

这是ormlite servicestack:

我不知道.当我查看docu/samples时:https://github.com/ServiceStack/ServiceStack.OrmLite

他们写:

现在,Expression支持可以使用强类型API来满足大多数简单查询.对于任何更复杂的事情(例如,使用表连接的查询),您仍然可以轻松地回退到原始SQL查询,如下所示.

我已经看到有一个JoinSqlBuilder类,但我不认为它可以返回嵌套集合.

也许我想要的是不可能的,但也许我可以做一个妥协,比如让所有员工都参加部门会议.然后我记忆员工并获取某个employeeId的所有联系人类型.创建层次结构并分配列表仍然是我的工作.

但我希望有一个更短的解决方案.

什么也没关系,当查询但它可能看起来像返回一个具有3个平面属性的对象(动态?):Department,Employees,ContactTypes并为我的DTO分配thoese属性.

ormlite-servicestack

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

使用ServiceStack.ORMLite实现工作单元和存储库模式的最佳实践

假设有两个存储库接口:

interface IFooRepository
{
    void Delete(int id);
}

interface IBarRepository
{
    void Delete(int id);
}
Run Code Online (Sandbox Code Playgroud)

和IUnitOfWork接口类似:

interface IUnitOfWork : IDisposable
{
    void Commit();
    void Rollback();
}
Run Code Online (Sandbox Code Playgroud)

使用ServiceStack.ORMLite实现这些接口的最佳实践是什么,以便用户可以像使用它们一样使用它们

MyFooRepository.Delete(4);
// if an Exception throws here, Bar won't be deleted
MyBarRepository.Delete(7);
Run Code Online (Sandbox Code Playgroud)

要么

using (var uow = CreateUnitOfWork())
{
    MyFooRepository.Delete(4);
    MyBarRepository.Delete(7);
    uow.Commit();  //now they are in an transaction
}
Run Code Online (Sandbox Code Playgroud)

repository-pattern servicestack ormlite-servicestack

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

在servicestack ormlite中分页

我正在寻找一种在ormlite中实现分页的好方法,我发现了另一个问题,其中包含以下代码:

var data = db.Select<address>(predicate).Skip((int) pageNumber).Take((int) pageSize).ToList();

上面的问题是它返回所有结果,然后跳过并接受它,这违背了分页的目的.

在另一个google群组帖子中,我发现了同样的问题,并且github问题中的一个示例被提及作为解决方案,但URL不再有效.有谁知道如何使用servicestack正确页面?

ormlite-servicestack

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

如何对ServiceStack进行单元测试?

我喜欢SS但我正在试图对我的业务层进行单元测试.我是单位测试和模拟的新手,并且正在阅读NSubstitute,因为这看起来像一个有趣的模拟层.

我的文件结构大致如下:

MainAppHostProject*
|
 -AppStart
    -AppHost  <-- standard apphost

DtoProject*
|
 -HelloWorldDto  <-- simple POCO to 


ServiceLayerProject*
|
 -HelloWorldService  <-- service interface that merely passes/sends Dtos to/from business layer


BusinessLayerProject*
|
 -HelloWorldManager <-- logic to construct response and this class extends 'Service' (letting me access Db, session, etc)...sidenote: maybe i shouldve called this a HelloWorldRepository?
 -CustomAuthProvider
 -CustomUserSession


DaoProject*
|
 -HelloWorldDao  <-- POCO of table structure
Run Code Online (Sandbox Code Playgroud)

Apphost指向HelloWorldService程序集并将SQL Server数据库注册为标准数据库.

一切都很有效,我已经能够以更清洁的方式构建逻辑.不幸的是我想开始进行单元测试,但我不知道如何解耦数据库.

我试图在内存数据库中注册一个假的,但后来我认为我在SQL Server和SQLite方式中使用代码来获取身份等方面存在不兼容问题.

// container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(":memory:", false, SqliteOrmLiteDialectProvider.Instance));
// container.Register<IDbConnectionFactory>(c => …
Run Code Online (Sandbox Code Playgroud)

sql sqlite unit-testing servicestack ormlite-servicestack

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

如何在ServiceStack中使用Dapper

目前,我正在使用OrmLite进行数据库操作.我也打算使用Dapper ORM,但任何人都可以指出我如何在ServiceStack中集成DapperORM.我是否需要将Dapper和插件的IDbConnection和IDbConnectionFactory接口实现到容器中.

  public override void Configure(Container container) {
        container.Register<IDbConnectionFactory>(
          c => new OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["default"].ConnectionString,
                                            SqlServerDialect.Provider));

        container.Register<IDbConnection>(c => c.Resolve<IDbConnectionFactory>().OpenDbConnection()).ReusedWithin(ReuseScope.Request);

      }
Run Code Online (Sandbox Code Playgroud)

servicestack dapper ormlite-servicestack

10
推荐指数
2
解决办法
2483
查看次数

使用varchar(max)而不是varchar(8000)创建列

如何在表中创建列并在使用servicestack ormlite时将其指定为varchar(max)?

目前我在创建表后执行一些sql以获得我想要的东西.我已经看过StringLength属性,但想知道是否有更好的方法呢?

就像是

StringLength(Sql.VarcharMax)
Run Code Online (Sandbox Code Playgroud)

谢谢

ormlite-servicestack

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