标签: ormlite-servicestack

使用ServiceStack.ORMLite构建存储库

我正在使用servicestack,我打算使用ormlite作为数据访问层.我有这些表(SQL Server 2005)

Table ITEM
ID PK
...

Table SUBITEM1
ID PK FK -> ITEM(ID)
...

Table SUBITEM2
ID PK FK -> ITEM(ID)
...

Table POST
ID PK
...

Table COMMENT
ID PK
...

Table DOWNLOAD
ID PK
...

Table POST_COMMENT
ID PK
POST_ID FK -> POST(ID)
COMMENT_ID FK -> COMMENT(ID)

Table DOWNLOAD_COMMENT
ID PK
DOWNLOAD_ID FK -> DOWNLOAD(ID)
COMMENT_ID FK -> COMMENT(ID)
Run Code Online (Sandbox Code Playgroud)

我为每个表创建了一个类,并使用注释(自动增量,引用等)映射它们.

我决定为每个"实体"(项目,帖子,评论,下载)创建一个存储库.每个存储库都包含基本的CRUD逻辑,

例如.1 CommentRepository有一个Save(注释,对象关系),它执行db.Insert(注释,关系),其中关系是PostComment或DownloadComment.

例如.2 PostRepository有一个Save(Post p)执行插入POST.

我不确定这个解决方案,因为存储库接口是不同的,我不能做多态查询.

你能提供任何建议来改善我的DAL吗?

感谢您的关注.

repository-pattern servicestack ormlite-servicestack

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

ConvertToList中的NullReference异常(ServiceStack OrmLite)

我在应用程序中使用OrmLite进行数据访问.在4个环境中的3个环境中,一切都按预期工作.

所有环境都在运行.net 4.5.数据库运行的版本不同.失败的环境是连接到sql server 10.50.2796,工作环境连接到sql server 10.50.4000.

System.Data*程序集的版本在无法正常工作的服务器上是相同的.

堆栈跟踪:

System.NullReferenceException:未将对象引用设置为对象的实例.位于服务堆栈的ServiceStack.OrmLite.ReadExtensions.ConvertToList [T](IDataReader dataReader)的lambda_method(Closure,Object,Object)中的C:\ src\ServiceStack.OrmLite\src\ServiceStack.OrmLite\Expressions\ReadExtensions.cs:第151行.OrmLite.ReadExtensions.Select [T](IDbCommand dbCmd,Expression 1 predicate) in C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite\Expressions\ReadExtensions.cs:line 23 at ServiceStack.OrmLite.ReadConnectionExtensions.Exec[T](IDbConnection dbConn, Func2过滤器)在C:\ src\ServiceStack.OrmLite\src\ServiceStack.OrmLite\Expressions\ReadConnectionExtensions.cs:第26行

更新 我认为这是一个与我连接的sql server版本相关的错误.如果我在工作环境中更改连接字符串以使用运行10.50.2796的数据库,则会遇到相同的错误.

TIA,杰森

servicestack ormlite-servicestack

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

ServiceStack将ORMLite交换到实体框架

我想将ORMLite替换为EF5,请不要问我为什么:P ...所以我在网上搜索并且没有找到关于如何实际执行此操作的信息.

我是否需要改写ORMLiteConnectionFactoryEFConnectionFactory在的global.asax.cs注册?它实现起来似乎很多而且非常复杂,因为它IOrmLiteDialectProvider OrmLiteConfig与所有这些相关联,并且它似乎并不正确,因为SS通常对所有问题都有一个简单的答案.例如,如果我想将Funq更改为另一个DI提供程序,则相当容易.

ORMLite是武器的固定选择还是我可以调整的灵活选项?请帮忙.

servicestack ormlite-servicestack

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

在ServiceStack.OrmLite中选择数据子集

有没有办法在ServiceStack.OrmLite中返回表的子集?
就像是:

public class MyStuff
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public byte[] Data { get; set; } // Some large blob, which is not desired in the list
}

var somestuff = db.Select<MyStuff>(x => new { Id = x.Id, Name = x.Name });
Run Code Online (Sandbox Code Playgroud)

我真的希望避免手动的东西,比如"从某个地方选择blabla"......

ormlite-servicestack

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

如何将ormlite注入或连接到ServiceStack存储库?

我想从存储库而不是服务类访问数据库(为了增加分离 - 不确定这是否有点过分)即

public class TodoRepository // : BaseRepository derive the class and inject IDbConnection somehow? 
{        
    public List<Todo> GetByIds(long[] ids)
    {
        return Db.Select<Todos>(t => Sql.In(t.id, ids));   <-- how to get 'Db' in here
    }
}
Run Code Online (Sandbox Code Playgroud)

服务基类已经允许使用'Db'对象通过ormlite直接访问数据库,因此:

public class Service : IService, IRequiresRequestContext, IServiceBase, IResolver, IDisposable
{
    public virtual IDbConnection Db { get; }
}
Run Code Online (Sandbox Code Playgroud)

让我相信我可以这样做,所以我可以在派生类中使用'Db':

public class BaseRepository: IDisposable
{
    public virtual IDbConnection Db { get; }
}
Run Code Online (Sandbox Code Playgroud)

我的AppHost中有这一行来传递连接字符串并注册存储库:

container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider));
container.Register(new TodoRepository());
Run Code Online (Sandbox Code Playgroud)

如何将IDbConnection注入或自动装载到BaseRepository类?我已经尝试在AppHost中注册并自动装配BaseRepository而没有运气.

repository servicestack funq ormlite-servicestack

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

在单元测试中,您在哪里设置OrmLiteConfig.DialectProvider.NamingStrategy?

我在一个项目中使用ORMLite和Dapper,并希望标准化两个ORM使用的命名约定.为了做到这一点,我想将NamingStrategy设置为:

OrmLiteConfig.DialectProvider.NamingStrategy = new OrmLiteNamingStrategyBase();
Run Code Online (Sandbox Code Playgroud)

和单元测试验证

public class BorrowerUnitTests : IDisposable    
{
    private readonly ServiceStackHost appHost;

    public BorrowerUnitTests()
    {
        //Set ORMLite to work with columns like ColumnLikeThis
        // OrmLiteConfig.DialectProvider.NamingStrategy = new OrmLiteNamingStrategyBase();

        appHost = new BasicAppHost(typeof(BorrowerServices).Assembly)
        {

            ConfigureContainer = container =>
            {

                container.Register<IDbConnectionFactory>(c =>
                    new OrmLiteConnectionFactory(ConfigUtils.GetConnectionString("LoanOrigination:Default"), PostgreSqlDialect.Provider));

                container.RegisterAutoWiredAs<Repository, IRepository>();
                container.RegisterAutoWired<BorrowerDomainService>();
            }

        }
        .Init();
    }

    public void Dispose()
    {
        appHost.Dispose();
    }

    [Fact]
    public void TestPostMethod()
    {
        var service = appHost.Container.Resolve<BorrowerServices>();

        BorrowerCreate request = new BorrowerCreate();
        request.FirstName = "Orm";
        request.LastName = "Lite"; …
Run Code Online (Sandbox Code Playgroud)

unit-testing servicestack ormlite-servicestack

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

SQL Server中的ServiceStack.OrmLite nolock提示

我一直在审查ServiceStack.OrmLite.SqlServer库,它工作得很好,但我们正在查看生成的SQL,我们想在我们的select语句中添加一个nolock提示但是找不到任何相关的文档?

当前:

exec sp_executesql N'SELECT "GroupID", "Name", "ShortName", "GroupTypeID", "ParentGroupId" FROM "Group" WHERE "GroupID" = @GroupID',
                   N'@GroupID int', @GroupID = 5543
Run Code Online (Sandbox Code Playgroud)

想:

exec sp_executesql N'SELECT "GroupID", "Name", "ShortName", "GroupTypeID", "ParentGroupId" FROM "Group" **WITH (NOLOCK)** WHERE "GroupID" = @GroupID',
                   N'@GroupID int', @GroupID = 5543
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做吗?

servicestack ormlite-servicestack

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

ServiceStack联接3个表

是否可以使用ServiceStack联接2个以上的表?我尝试过类似的方法,但是我需要链接evrything:

// Join PatientDetails and BedDetails
SqlExpression<PatientDetails.PatientDetails> q = _dbConnection.From<PatientDetails.PatientDetails>();
q.Join<PatientDetails.PatientDetails, BedDetails.BedDetails>((patient, bed) => patient.ByBedId == bed.BedDetailsId);
List<PatientDetails.PatientDetails> PatientBedJOIN = _dbConnection.Select(q);

// Join PatientSession and PatientDetails
SqlExpression<PatientSession> q1 = _dbConnection.From<PatientSession>();
q1.Join<PatientSession, PatientDetails.PatientDetails>((session, patientd) => session.ByPatientId == patientd.PatientDetailsId);
List<PatientSession> SessionPatientJOIN = _dbConnection.Select(q1);
Run Code Online (Sandbox Code Playgroud)

我正在使用OrmLite和Sqlite,谢谢

c# sqlite servicestack ormlite-servicestack

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

ORMLite是否支持C#的动态类型?

我正在研究ServiceStack中的ORMLite,我在这里尝试的是调用一个存储过程,该存储过程又返回许多行,这些行肯定不会绑定到任何域对象,但也可能有或没有dto对象来映射用.我想知道我是否可以将它绑定到一个类型.但是,听起来ORMLite目前不支持动态类型绑定.ORMLite目前是否支持?

c# orm servicestack ormlite-servicestack

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

我可以将这三个相似的功能合并为一个功能吗?

我可以将下面三个非常相似的功能合并到一个功能中吗?

所有这三个函数都会更新数据库中的特定列.update语句中的匿名对象用于更新相应的列.不应更改匿名对象中的成员名称,因为它是数据库中列的名称.

我正在使用ormlite-servicestack进行数据库连接.数据库我使用Microsoft SQLServer 2012.

功能1:

//Updating the call status.
private void UpdateCallStatus(string claimId, bool isDisconnected)
{
    _LogFactory.LogInfo(this.GetType(), "Updating call status....\n");

    IDbConnectionFactory maConnectionFactory = new DatabaseConnection().getConnection();
    using (var db = maConnectionFactory.Open())
    {
        db.Update<IVRSCallDetails>(new { IsDisconnected = isDisconnected }, where: callDetail => callDetail.ClaimId == claimId);
    }
}
Run Code Online (Sandbox Code Playgroud)

功能2:

//Updating the selected dtmf by the client using the claimid.
private void UpdateDtmf(string claimId, string selectedDtmf)
{
    _LogFactory.LogInfo(this.GetType(), "Updating Selected DTMF:" + selectedDtmf + "\n");

    IDbConnectionFactory maConnectionFactory = new DatabaseConnection().getConnection();
    using (var db …
Run Code Online (Sandbox Code Playgroud)

.net c# servicestack ormlite-servicestack

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