2016-09-20 3 views
0

Я хочу сохранить динамический объект в базу данных. Имя таблицы базы данных будет задано динамически. Поэтому у меня нет класса.Настройки Имя типа динамического объекта C#

private static dynamic CreateModel() 
    { 
     var model = string.Format("{{'id': '{0} - {1}', 'name':' Path - ', 'length':'{2}' }}", Guid.NewGuid(), DateTime.Now,new Random().NextDouble() * 10); 

     return JsonConvert.DeserializeObject(model); 
    } 

Это создает динамический объект. И я добавляю это в универсальный репозиторий framework.

using (var repository = new EFRepository(new Context())) 
{ 
    repository.SaveOrUpdate<????>(CreateModel()) 
} 

Я не могу установить имя типа. Я могу установить здесь случайное имя.

(repository.SaveOrUpdate<T> является общим методом)

+0

ваши сигнатуры методов не принимают параметр общего типа –

+1

Если вы используете дженерики, в какой-то момент вам нужно будет ввести конкретный 'T'. Любая причина, по которой вы не можете десериализоваться в «T»? –

+0

Только у вас есть использование 'Reflection' или использование базового типа, если все объекты наследуются от базового типа. – Rahul

ответ

0

Вы не можете использовать EF, как это.

Вы не можете передавать динамический метод SaveOrUpdate, потому что dynamic может быть любым, может быть String, Int или Object. И компилятор, который вы никогда не знаете об этом, пока не запустит приложение, поскольку типы dynamic не разрешены во время компиляции, а во время выполнения.

Сказать, что, как вы можете сделать изображение, вы не можете использовать динамическое в генераторах <T>, потому что T должен быть ссылкой и динамикой, которую он решает на время работы.

Я думаю, что лучше использовать OO, чтобы помочь вам в этом, создав базовый класс с фабрикой для создания ваших динамических объектов и используя этот базовый класс вместо динамического.

Смежные вопросы