我正在尝试使用Dapper.Contrib.Extensions库在数据库中插入“ ClassName”类的实例,我正在使用.NET Framework 4.6.1的 Activator.CreateInstance 方法因为我只有纯文本形式的类名,所以我无法实例化直接调用该类的对象。
投射ClassName可以按预期的方式进行 connTo.Insert((ClassName)instance); ,但是我不能使用这种方式,因为“ ClassName”只是我从XML文件中获得的文本。
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Data");
Query query = databaseReference.orderByChild("name")
.startAt(mSearchText)
.endAt(mSearchText+"\uf8ff");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data:dataSnapshot.getChildren()){
String name = data.child("name").getValue().toString();
String priority = data.child("Priority").getValue().toString();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
.NET中引发的异常: System.Data.SqlClient.SqlException:'')附近的语法不正确。'
错误的说明:Dapper试图在对象表中插入对象。我的目的是将其插入到className表中。
SQL错误:将Object()个值()插入;选择SCOPE_IDENTITY()id
答案 0 :(得分:2)
我猜您正在使用采用通用参数TEntity或类似参数的通用方法。由于您提供了类型对象,因此它将使用该对象。您可能应该使用非通用方法。
编辑:是的,我的猜测是正确的。
https://github.com/StackExchange/Dapper/blob/master/Dapper.Contrib/SqlMapperExtensions.cs#L332
有趣的是,该方法没有任何泛型重载。您可以使用反射来调用具有正确泛型参数的泛型方法
例如,请确保缓存3
的结果,这是昂贵的
runWriter