我试图在我的单元测试中使用Sqlite作为内存数据库和ServiceStack ORMlite.
如果我用SQLite保存到文件运行我的测试,即.使用connectionstring
"Data Source=|DataDirectory|unittest.db;Version=3;"
Run Code Online (Sandbox Code Playgroud)
,它工作正常,ServiceStacks生成auth表
userRepository.CreateMissingTables();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用此连接字符串将SQLite用作内存数据库时
":memory:"
Run Code Online (Sandbox Code Playgroud)
说的时候我有例外
SQLite error
no such table: UserAuth
Run Code Online (Sandbox Code Playgroud)
我第一次尝试通过这样做来获取用户
userRepository.GetUserAuthByUserName(...)
Run Code Online (Sandbox Code Playgroud)
这是在我调用了userRepository.CreateMissingTables()之后,如果我切换到使用带有文件数据库的SQLite,它就能正常工作.有谁知道问题可能是什么?(由于Ormlite 3.9.4中对ORM lite版本1.0.65.0的错误引用,我不得不降级到ORMLite版本3.9.0)
String在Poco类中声明属性时,OrmLite将varchar(8000) NULL在数据库中为其生成一列.例如,我有以下类和生成的表:


我想知道如何指定该字段的长度.对于FirstName而言,拥有8000个字符是没有意义的,例如,我该如何强迫NOT NULL?在UserName与Password列应该始终有值.
我是ORMLite的新手.在实体框架中,我可以从现有数据库创建我的POCO文件(通过使用CodeFirst) - 我在某处阅读了Ormlite中可能的内容 - 但我没有在文档中找到它.
如果ORMLite不支持此功能,请推荐一个框架来创建我的poco类(我不想用EF生成我的pocos!)
谢谢!
任何人都可以解释QueryById()和GetById()之间的区别,因为它们都具有相同的签名.并且有很多常见的函数以Query和Get开头,可能会有一些我认为缺少的主要区别.
我使用MS SQL Server工作ServiceStack.OrmLite.我想对数据库执行原始SQL,但原始文档包含如何仅使用SELECT语句执行此操作的说明.这对我来说还不够.
我无法找到运行任何简单的方法:
UPDATE table1
SET column1 = 'value1'
WHERE column2 = value2
Run Code Online (Sandbox Code Playgroud)
使用,例如:
var two = db.Update(@"UPDATE table1
SET column1 = 'value1'
WHERE column2 = value2");
Run Code Online (Sandbox Code Playgroud)
使用db.Update()或db.Update <>运行此表达式会产生不一致的错误,例如
关键字"UPDATE"附近的语法不正确.
我想使用原始sql,因为我的真实UPDATE表达式使用JOIN.
我创建了以下示例来测试外键,到目前为止,它运行良好.我希望能够做的是使用我构建的这个框架来设置关系的属性,并在保存Parent时保存子对象并自动设置PrimaryKey和Foreign Key.DataManager类公开Connection
public class DataManager
{
DataManager()
{
OrmLiteConfig.DialectProvider = SqliteDialect.Provider;
ConnectionString = SqliteFileDb;
updateTables();
}
private void updateTables()
{
using (var dbConn = OpenDbConnection())
{
dbConn.DropAndCreateTable<Person>();
dbConn.DropAndCreateTable<PhoneNumber>();
}
}
public static string SqliteFileDb = "~/App_Data/db.sqlite".MapAbsolutePath();
private static DataManager manager;
public static DataManager Manager {
get
{
if (manager == null)
manager = new DataManager();
return manager;
}
}
public IDbConnection InMemoryDbConnection { get; set; }
public IDbConnection OpenDbConnection(string connString = null)
{
connString = ConnectionString;
return connString.OpenDbConnection();
}
protected …Run Code Online (Sandbox Code Playgroud) 我必须调用存储过程,但传递一个数据表(一个iEnumerable)作为参数.
SQL服务器上的我的SP将此参数视为:
@LIST_USERS dbo.LIST_USERINFO_TYPE READONLY
Run Code Online (Sandbox Code Playgroud)
并且类型定义为:
CREATE TYPE [dbo].[LIST_USERINFO_TYPE] AS TABLE(
[ID_USER] [int] NOT NULL,
[ID_DATA] [int] NOT NULL,
[HEADER_TXT] [varchar](100) NULL)
Run Code Online (Sandbox Code Playgroud)
然后,在调用者方面,我以这种方式创建参数:
list.Add(new UserInfoItem { IdUser = 401, IdData = 3, HeaderTxt = "" });
list.Add(new UserInfoItem { IdUser= 402, IdData= 2, HeaderTxt= "gotcha" });
list.Add(new UserInfoItem { IdUser= 403, IdData= 1, HeaderTxt= "pacific rim" });
dbConn.StoredProcedure(sp,
new
{
LISTA_QUESTIONARIO = DomandeRisposteList
});
Run Code Online (Sandbox Code Playgroud)
当我启动项目实际上它停止KeyNotFoundException尝试
name.DbType = OrmLiteConfig.DialectProvider.GetColumnDbType(propertyInfo.PropertyType);
Run Code Online (Sandbox Code Playgroud)
在 ServiceStackExtension.cs
我怎样才能做到这一点?
我一直在使用SqlList()从SP接收结果集,这很方便.
var people = db.SqlList<Person>("EXEC GetRockstarsAged @age", new { "age", 42 });
Run Code Online (Sandbox Code Playgroud)
但是如何使用此OrmLite从单个SP获取多个结果集?使用上述方法似乎只检索第一个结果集.
我正在使用ServiceStack OrmLite SqlServer v3.9.71并具有以下连接字符串:
<add key="ConnStr" value="Data Source=my-db;Initial Catalog=Users;Integrated Security=SSPI;Connection Timeout=666"/>
Run Code Online (Sandbox Code Playgroud)
并使用以下命令运行查询,需要2-3分钟才能返回:
using (Db)
{
var result = new ResultDto();
Parallel.Invoke(
() => { result.StatOne = Db.Dictionary<DateTime, int>(query1); },
() => { result.StatTwo = Db.Dictionary<DateTime, int>(query2); }
);
return result;
}
Run Code Online (Sandbox Code Playgroud)
当在Db对象上放置一个断点时,我可以看到连接超时,666但我无法弄清楚如何在每次运行上面时设置/增加命令超时它30在默认超时的秒后超时.
有任何想法吗?
我正在评估ServiceStack以确定它是否适用于通用REST服务器构建目的,并且我正在尝试扩展Northwind演示,我已在本地更新以使用ServiceStack的4.0.44.我调整的代码是到位桶这里,倾倒从GIT中汞,然后用我自己的变化增加.
我的代码和上游serviceStack.Examples northwind演示之间的区别是以下新增内容:
A .../date/Route已添加到Orders的ServiceModel.Operations对象:
namespace ServiceStack.Northwind.ServiceModel.Operations
{
...
[Route("/orders")]
[Route("/orders/date/{ByDate}")] // ADDED!
[Route("/orders/page/{Page}")]
[Route("/customers/{CustomerId}/orders")]
public class Orders
{
public int? Page { get; set; }
public DateTime? ByDate { get; set; } // ADDED!
public string CustomerId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后这个案例的处理程序被添加到服务中,它在运行时因奇怪的LINQ故障而爆炸: variable 'o' of type 'ServiceStack.Northwind.ServiceModel.Types.Order' referenced from scope '', but it is not defined...
Source = System.Core
namespace ServiceStack.Northwind.ServiceInterface
{
public class OrdersService : Service
{
private const int PageCount = 20; …Run Code Online (Sandbox Code Playgroud)