Преобразование объекта Expando в класс динамически? - PullRequest
0 голосов
/ 16 января 2019

Я получаю список записей таблицы через хранимую процедуру, используя dapper.

 var data = _db.Query<System.Dynamic.ExpandoObject>('myStoredPoroc', p, commandType: System.Data.CommandType.StoredProcedure);

До этого я получаю реальный класс модели как сущность, используя отражение

 //First we need to find the project that holds all of our entity models in the assembly
                    var assembly = AppDomain.CurrentDomain.GetAssemblies().Where(x => x.FullName.Contains("MyProject.Model")).FirstOrDefault();

                    //Now we need to search through the assembly to match the Entity to the supplied TableName
                    var type = assembly.GetTypes()
                    .FirstOrDefault(t => t.Name == localTableName);

                    //Once found then we create a dynamic instance of the entity using reflection
                    if (type != null)
                    {
                        var context = new Model.Entities();
                        //Create the DBSet here
                        System.Data.Entity.DbSet myDbSet = contextSet(type);

                        //Now create the actual entity reference which is just an object at this point
                        var entityObject = myDbSet.Create();
                     }

Как только данные возвращаются, я пытаюсь использовать приведенные ниже методы для преобразования списка записей в его реальную сущность.

                        if (data.Any())
                        {
                            var record = DynamicCast(data, entityObject.GetType());                           
                        }

dynamic DynamicCast(object entity, Type to)
{
    var openCast = this.GetType().GetMethod("Cast", BindingFlags.Static | BindingFlags.NonPublic);
    var closeCast = openCast.MakeGenericMethod(to);
    return closeCast.Invoke(entity, new[] { entity });
}
static T Cast<T>(object entity) where T : class
{
    return entity as T;
}

Проблема в том, что запись пуста. Почему я не могу привести объект расширения к объектной модели? Это должна быть карта 1 к 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...