如何通过Activator.CreateInstance实例化对象,然后使用Dapper将其插入表中

时间:2019-03-28 13:08:35

标签: c# .net dapper

我正在尝试使用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

1 个答案:

答案 0 :(得分:2)

我猜您正在使用采用通用参数TEntity或类似参数的通用方法。由于您提供了类型对象,因此它将使用该对象。您可能应该使用非通用方法。

编辑:是的,我的猜测是正确的。

https://github.com/StackExchange/Dapper/blob/master/Dapper.Contrib/SqlMapperExtensions.cs#L332

有趣的是,该方法没有任何泛型重载。您可以使用反射来调用具有正确泛型参数的泛型方法

例如,请确保缓存3的结果,这是昂贵的

runWriter