c# - ORMLite 支持 C# 的动态类型吗?

标签 c# orm servicestack ormlite-servicestack

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

最佳答案

按照设计,OrmLite 不支持编码到动态类型,并期望结果集映射到类型化 POCO。

尽管它确实有专门的 API 来访问 Dynamic Result Sets使用 C# 7 元组:

var query = db.From<Employee>()
    .Join<Department>()
    .OrderBy(e => e.Id)
    .Select<Employee, Department>(
        (e, d) => new { e.Id, e.LastName, d.Name });

var results = db.Select<(int id, string lastName, string deptName)>(query);

var row = results[i];
$"row: ${row.id}, ${row.lastName}, ${row.deptName}".Print();

或者List<object> :

db.Select<List<object>>(db.From<Poco>()
  .Select("COUNT(*), MIN(Id), MAX(Id)"))[0].PrintDump();

/* Output */
[
    10,
    1,
    10
]

或者使用Dictionary<string,object> ,例如:

db.Select<Dictionary<string,object>>(db.From<Poco>()
  .Select("COUNT(*) Total, MIN(Id) MinId, MAX(Id) MaxId"))[0].PrintDump();

/* Output */
{
    Total: 10,
    MinId: 1,
    MaxId: 10
}

以及能够映射到松散类型的 .NET 集合:

Dictionary<int, string> trackIdNamesMap = db.Dictionary<int, string>(
    "select Id, Name from Track")

Dictionary<int, List<string>> albumTrackNames = db.Lookup<int, string>(
    "select AlbumId, Name from Track")

List<string> trackNames = db.Column<string>("select Name from Track")

HashSet<string> uniqueTrackNames = db.ColumnDistinct<string>("select Name from Track")

使用 Dapper 的查询

OrmLite 确实有 Dapper 的嵌入版本其中does support dynamic results :

using ServiceStack.OrmLite.Dapper;

using (var db = new SqlConnection(@"Data Source=... etc."))
{
    db.Open();

    var p = new DynamicParameters();
    p.Add("@params", "Id=21");

    IEnumerable<dynamic> dynamicResults = db.Query(sql:"GetPivotData", param: p,
        commandType:CommandType.StoredProcedure);
}

关于c# - ORMLite 支持 C# 的动态类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538114/

相关文章:

c# - 将 ASP.NET WebAPI Minimal 中的 Program.cs 与 Startup.cs 分开以进行集成测试

mysql - 如何使用 Sequelize 和 mySql 选择外键列的名称?

java - 在 Cayenne 中设置数据库路径

mysql - ServiceStack.OrmLite : StringLengthAttribute. MaxText 生成 "LONGTEXT"- 如何设置为 "TEXT"?

asp.net-mvc - ServiceStack 新服务并排 ASP.NET MVC 网站

c# - 限制并发调用的最佳实践

c# - 我应该将自定义类放在 ASP.NET Core 项目中的什么位置

c# - 如果通过主机名访问 API,RestSharp 和 NTLM 身份验证不起作用

java - 如何修复 org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@779de014 is closed 问题

asp.net-core - 如何使用 Servicestack 在 .NET Core 中使用 Windows 身份验证登录