Entity Framework 4.1 не добавляет строки в базу данных SQL Server Express

Работа с Entity Framework 4.1 с базой данных SQL Server Express .mdf.

В целях тестирования я пытаюсь выполнить операции CRUD в базе данных SQL Server Express, используя Entity Model в приложении WPF.

Я новичок в этой концепции, я следил за видеоуроком и делал кодирование в соответствии с этим.

Я создал Entity-модель одной очень простой таблицы. И я написал простой код в файле cs для добавления одной строки в базу данных, используя следующий код

testEntities db = new testEntities();
TestTable tb = new TestTable();
tb.Name = txtName.Text;
tb.Email = txtMail.Text;
db.TestTables.AddObject(tb);
db.SaveChanges();

Но если я вернусь, проверьте базу данных, данные не добавляются. Скажите, пожалуйста, что здесь не так ??

А вот и моя строка подключения

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="testEntities" 
         connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\test.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

person panindra    schedule 18.07.2012    source источник
comment
@marc_s, я обновил вопрос и добавил строку подключения .. где я ошибаюсь   -  person panindra    schedule 18.07.2012
comment
Сообщение об ошибке? Вы пытались отладить приложение шаг за шагом, чтобы увидеть, что происходит? Отладчик - ваш лучший друг, научитесь им пользоваться. Код, который вы показали, выглядит нормально, держу пари, что проблема есть где-то еще (например, вы забыли подключить даже обработчики и тому подобное).   -  person walther    schedule 18.07.2012
comment
@walthereven, я не получаю ошибок. Я попробовал поймать, это нормально   -  person panindra    schedule 18.07.2012


Ответы (1)


Весь подход User Instance и AttachDbFileName = ошибочен - в лучшем случае! Visual Studio будет копировать .mdf файл (из DataDirectory в выходной каталог вашего запущенного приложения), и скорее всего ваш INSERT работает нормально, но вы просто смотрите на неправильный .mdf файл в конце концов!

Если вы хотите придерживаться этого подхода, попробуйте поставить точку останова на вызов .SaveChanges(), а затем проверьте файл .mdf в каталоге запущенного приложения с помощью SQL Server Mgmt Studio Express - я почти уверен, что ваши данные там.

На мой взгляд, реальным решением было бы

  1. установите SQL Server Express (и вы уже это сделали)

  2. установить SQL Server Management Studio Express

  3. создайте свою базу данных в SSMS Express, дайте ей логическое имя (например, TestDatabase)

  4. подключитесь к ней, используя ее логическое имя базы данных (заданное при ее создании на сервере) - и не возитесь с физическими файлами базы данных и пользовательскими экземплярами. В этом случае ваша строка подключения будет примерно такой:

    Data Source=.\\SQLEXPRESS;Database=TestDatabase;Integrated Security=True
    

    а все остальное в точности как раньше ...

person marc_s    schedule 18.07.2012
comment
спасибо за ваше предложение. я попробую еще раз создать царапину - person panindra; 19.07.2012
comment
Я согласен с этим анализом. Я ненавижу прикреплять mdf-файлы в SSE, это может вызвать много странных проблем. Я бы создал базу данных SSE в SSMS, как и в полномасштабном сервере Sql, и использовал бы строку подключения для этого формата, не используя .mdf вообще. Это должно вызвать меньше головной боли. - person GrayFox374; 19.07.2012