我正在将Dapper作为ORM解决方案进行测试,并且遇到了某些扩展方法(例如Execute或)的问题QueryMultiple:
using (SQLiteConnection con = new SQLiteConnection(GetConnectionString()))
{
con.Open();
string sql = @"
select * from Customer where Id = @id;
select * from Address where CustomerId = @id;";
// QueryMultiple extension ambiguous?
using (var multi = con.QueryMultiple(sql, new { id = 1 }))
{
Customer customer = multi.Read<Customer>().Single();
Address address = multi.Read<Address>().Single();
}
con.Close();
}
Run Code Online (Sandbox Code Playgroud)
我得到错误
在以下方法或属性之间的调用是模棱两可的:'Dapper.SqlMapper.QueryMultiple(System.Data.IDbConnection,字符串,对象,System.Data.IDbTransaction,int ?, System.Data.CommandType?)'和'Dapper.SqlMapper .QueryMultiple(System.Data.IDbConnection,string,dynamic,System.Data.IDbTransaction,int ?, System.Data.CommandType?)'
而且不知道如何正确解决这个问题。Dapper的例子没有提到这样的问题,只是使用了QueryMultiple。我能够使用以下方式避免歧义
var multi = con.QueryMultiple(new CommandDefinition(sql, new { id = 1 …Run Code Online (Sandbox Code Playgroud) (请随意为此问题建议更准确的标题.)
在我的Visual Studio 2015解决方案中,我有三个项目(让我们称之为Alpha,Beta和Gamma)或多或少相同,但不同之处在于它们定义了不同的后端.这两个项目都将一个类热插入同一个命名空间:
Α:
namespace SharedNamespace {
public class SharedClass {
// implement SharedClass using Alpha's backend
}
}
Run Code Online (Sandbox Code Playgroud)
Beta版:
namespace SharedNamespace {
public class SharedClass {
// implement SharedClass using Beta's backend
}
}
Run Code Online (Sandbox Code Playgroud)
伽玛:
namespace SharedNamespace {
public class SharedClass {
// implement SharedClass using Gamma's backend
}
}
Run Code Online (Sandbox Code Playgroud)
有几个项目使用这个热插拔类,每个类都引用Alpha,Beta或Gamma.其中一个(让我们称之为Omricon)用于引用Alpha,但现在引用Gamma:
// ...
SharedNamespace.SharedClass sharedClass;
sharedClass.DoThing();
// ...
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试构建Omricon时,C#编译器会给出错误CS0433:
The type 'SharedClass' exists in both 'Alpha, Version=0.0.0.0 (etc)'
and 'Gamma, Version=0.0.0.0 (etc)'
Run Code Online (Sandbox Code Playgroud)
但是,Omricon 只在构建时引用Gamma - …