2013-07-09 4 views
0

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

JobTable jobTable = new JobTable(); 
     int result = -1; 

     JobEntities context = new JobEntities(); 
     try 
     { 
      jobTable.JobDate = DateTime.Now; 
      jobTable.JobProcess = processName; 

      context.JobTable.Attach(jobTable); 
      context.JobTable.Add(jobTable); 

      result = context.SaveChanges(); 
      Console.WriteLine("Result => " + result.ToString()); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 

     return jobTable.JobId; 

Я получаю новый JobId каждый раз, но когда я проверить свою базу данных, таблица остается пустой. Что мне не хватает?

+0

Удалить e attach call, ваш add и attach выглядят так, как будто они находятся в конфликте –

+0

Вы уверены, что ищете хорошую базу данных? Как выглядит ваш .config? – tschmit007

+0

Сначала я попробовал его без приложения, и это не сработало. Вот почему я подумал, что мне нужно вставить приставку. Я просто попробовал это снова, и без приложения он тоже не работает. –

ответ

2

Несколько вещей,

Сначала присоедините обычно используется, чтобы сказать EF подключить объект, который уже находится в базе данных в контексте. Вы можете использовать это для добавления, но вам нужно вручную указать EF, что этот объект добавляется с помощью диспетчера состояний. Это не то, что вы хотите сделать здесь.

Add - это обычный способ вставки строки в базу данных, это также по существу добавляет этот объект в контекст EF.

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

Ниже то, что я думаю, что ваш код должен выглядеть следующим образом:

JobTable jobTable = new JobTable(); 

using(var context = new JobEntities()) 
{ 
    jobTable.JobDate = DateTime.Now; 
    jobTable.JobProcess = processName; 

    context.JobTable.Add(jobTable); 

    var result = context.SaveChanges(); 
    Console.WriteLine("Result => " + result.ToString()); 

    return jobTable.JobId; 
} 

Если это все еще не работает, я хотел бы предложить вам посмотреть на ваши строки подключения и подтвердите его на самом деле происходит в БД вы ожидаете, может быть, он сделал свою собственную БД где-то в другом месте

Возможно, полезно использовать приложение, чтобы запросить таблицу и посмотреть, существуют ли ваши строки, если ее установка идентификатора, означающего, что она фактически получила SQL, поскольку идентификаторы обычно генерируются база данных

+0

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

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