我一直在玩这个,因为它看起来感觉很像记录的帖子/用户示例,但它略有不同,并不适合我.
假设以下简化设置(联系人有多个电话号码):
public class Contact
{
public int ContactID { get; set; }
public string ContactName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}
public class Phone
{
public int PhoneId { get; set; }
public int ContactID { get; set; } // foreign key
public string Number { get; set; }
public string Type { get; set; }
public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望最终能够返回一个与多个Phone对象联系的东西.这样,如果我有2个联系人,每个联系人有2个电话,我的SQL将返回一个连接,作为结果集共4行.然后Dapper将弹出2个接触对象,每个接触对象有两部手机.
这是存储过程中的SQL:
SELECT *
FROM Contacts
LEFT …Run Code Online (Sandbox Code Playgroud) ADO.NET中有一个很好的功能,允许您在一次往返中将多个SQL语句发送到数据库,并接收所有语句的结果:
var command = new SqlCommand("SELECT count(*) FROM TableA; SELECT count(*) FROM TableB;", connection);
using(var reader = command.ExecuteReader())
{
reader.Read();
resultA = reader.GetInt32(0);
reader.NextResult();
reader.Read();
resultB = reader.GetInt32(0);
}
Run Code Online (Sandbox Code Playgroud)
Dapper.NET中是否有类似的功能?
我想批处理多个select语句以减少到数据库的往返.代码看起来像下面的伪代码.它在SQL Server上运行完美,但在Oracle上不起作用 - Oracle抱怨sql语法.我已经浏览了一下,我发现从Oracle返回多个结果集的唯一例子是使用存储过程.是否可以在Oracle中执行此操作而不使用存储过程?我正在使用MS Oracle数据提供程序,但如果需要,可以使用ODP.Net.
var sql = @"
select * from table1
select * from table2
select * from table3";
DbCommand cmd = GetCommand(sql);
using(var reader = cmd.ExecuteReader())
{
dt1.Load(reader);
reader.NextResult();
dt2.Load(reader);
reader.NextResult();
dt3.Load(reader);
}
Run Code Online (Sandbox Code Playgroud) ServiceStack ORMLite很棒,我通常避免使用ORM心态,而是更喜欢构建数据库,因为构建数据库而不是1:1类模型是有意义的.也就是说,有几件事我似乎遇到了困难,我确信这只是我无知的光芒.
第一:
有没有办法使用ORMLite管理多个结果集?我知道可以使用Dapper使用QueryMultiple方法,但无论出于何种原因,我都有时间搞清楚如何使用ServiceStack的内置Dapper实现.
第二:
有没有办法使用ORMLite在存储过程调用中返回输出参数?
理想情况下,我想避开MARS和输出参数,理想情况下我想生活在一个理想的世界:)
我正在使用.NET framework 4.5,SQL Server 2008 R2和ServiceStack 3.9.46.
stored-procedures sql-server-mars servicestack dapper ormlite-servicestack
我需要使用 Dapper.net 将一对多扁平化 SQL 查询映射到嵌套对象中。
Slapper.Automapper 似乎是做到这一点的好方法;正如这个问题的答案中所详细说明的:
public string MrFlibble3()
{
using (var connection = new SqlConnection(Constr))
{
Slapper.AutoMapper.Cache.ClearInstanceCache();
const string sql = @"SELECT tc.[IDG] as ContactIdg
,tc.[ContactName] as ContactName
,tp.[Idg] AS TestPhones_PhoneIdg
,tp.[ContactIdg] AS TestPhones_ContactIdg
,tp.[Number] AS TestPhones_Number
FROM TestContact tc
INNER JOIN TestPhone tp ON tc.Idg = tp.ContactIdg";
// Step 1: Use Dapper to return the flat result as a Dynamic.
dynamic test = connection.Query<dynamic>(sql);
// Step 2: Use Slapper.Automapper for mapping …Run Code Online (Sandbox Code Playgroud) 您可以从SQL Server 2008中的T-SQL函数返回单个表.
我想知道是否可以返回多个表.
场景是我有三个查询过滤3个不同的表.每个表都根据我想从函数返回的5个过滤表进行过滤; 而不是在每个查询中复制和粘贴他们的创建.
这是复制和粘贴的简单示例:
FUNCTION GetValuesA(@SomeParameter int) RETURNS @ids TABLE (ID int) AS
WITH Filter1 As ( Select id FROM FilterTable1 WHERE Attribute=SomeParameter )
, Filter2 As ( Select id FROM FilterTable2 WHERE Attribute=SomeParameter )
INSERT INTO @IDs
SELECT ID FROM ValueTableA
WHERE ColA IN (SELECT id FROM Filter1)
AND ColB IN (SELECT id FROM Filter2)
RETURN
-----------------------------------------------------------------------------
FUNCTION GetValuesB(@SomeParameter int) RETURNS @ids TABLE (ID int) AS
WITH Filter1 As ( Select id FROM FilterTable1 WHERE Attribute=SomeParameter …Run Code Online (Sandbox Code Playgroud) dapper ×4
c# ×2
sql ×2
sql-server ×2
.net ×1
ado.net ×1
oracle ×1
resultset ×1
servicestack ×1
t-sql ×1