2015-08-14 3 views
0

Я пытаюсь написать некоторую логику для получения значений сущностей из базы данных на основе значения динамической таблицы. После этого сообщения я получил меня до TEntityEntity framework - get entity by nameРабота с отражением и сущностями

Я не следую сказанному здесь. Следующий код:

public static void PublishTable(string user, ContentFields tableToPublish) 
     { 
      var jsonData = DataAccess.GetEnvironmentJson((int)Environments.Production); 
      var model = JsonConvert.DeserializeObject<Models.FullDataSetModel>(jsonData); 
      using (var db = new LoginPageContentEntities()) 
      { 
       var deployEntry = db.Deployment.Find((int)Environments.Production); 
       deployEntry.DateUpdated = DateTime.Now; 

       var pendingChangesFlag = deployEntry.GetType().GetProperty(tableToPublish.ToString()); 
       pendingChangesFlag.SetValue(deployEntry, false); 

       var publishToModel = model.GetType().GetProperty(tableToPublish.ToString()); 
       var tableValue = (IEnumerable<????>)typeof(LoginPageContentEntities).GetProperty(tableToPublish.ToString()).GetValue(db, null)); 
       publishToModel.SetValue(model, tableValue.ToList()); 

       var json = JsonConvert.SerializeObject(model); 
       deployEntry.JsonCache = json; 
       db.SaveChanges(); 
      } 
     } 

Например, если я передать объект из ProductInformation в IEnumerable<ProductInformation> это работает, когда я изменить что конкретного субъекта.

Выполняется в соответствии с разделом, я не следую тому, что нужно сделать, чтобы получить значения из контекста. Они определяют TEntity, но в определении нет ничего.

+0

TEntity - это [общий тип параметра - общие сведения] (https://msdn.microsoft.com/en-us/library/512aeb7t.aspx). Вы можете определить его после имени метода 'void PublishTable (string user ...)', а затем при вызове метода укажите конкретный тип 'PublishTable (« username », ...);'. Хороший учебник можно найти в MSDN [Введение в C# Generics] (https://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx). – pasty

+0

Я посмотрел на этот учебник, но я не видел ничего, охватывающего синтаксис, чтобы искать тип сущности с помощью дженериков, но я буду продолжать его. Не знаю, как работать с общим методом с моим методом. –

ответ

1

Ваш вопрос кажется - Что такое TEntity?

TEntity является общим. По этой ссылке, предоставленной в комментарии https://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx#csharp_generics_topic2

См блочный код

public class Stack<T> 
{ 
    T[] m_Items; 
    public void Push(T item) 
    {...} 
    public T Pop() 
    {...} 
} 

T уточняет родовым. Вы можете подключить класс - например, тот, который у вас есть ProductInformation, при создании экземпляра Stack. Например -

var stk = new Stack<ProductInformation>(); 
0

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

public static void PublishTable<TEntity>() 
     { 
      var targetEntity = typeof(TEntity).Name; 
      var model = JsonConvert.DeserializeObject<Models.FullDataSetModel>(DataAccess.GetEnvironmentJson((int)Environments.Production)); 
      using (var db = new LoginPageContentEntities()) 
      { 
       var deployEntry = db.Deployment.Find((int)Environments.Production); 
       deployEntry.DateUpdated = DateTime.Now; 
       deployEntry.GetType().GetProperty(targetEntity).SetValue(deployEntry, false); 
       model.GetType().GetProperty(targetEntity).SetValue(model, ((IEnumerable<TEntity>)(typeof(LoginPageContentEntities).GetProperty(targetEntity).GetValue(db, null))).ToList()); 
       deployEntry.JsonCache = JsonConvert.SerializeObject(model); 
       db.SaveChanges(); 
      } 
     } 
Смежные вопросы