Entity framework не создает таблицу в БД

Итак, во-первых, я не знаю, какую версию Entity Framework я использую. Я предполагаю, что это 4, но как мне проверить?

Во-вторых, у меня есть следующая строка подключения в web.config:

  <connectionStrings>

<add name="DBEntites"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
     providerName="System.Data.SqlClient" />

<add name="ApplicationServices"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
     providerName="System.Data.SqlClient" />

As you can see they are the same DB. In fact they are the DB created by asp.net Membership Provider.

Теперь у меня есть следующая модель:

public class Profile {
    [Key]
    public string username { get; set; }

    [Display(Name = "Full Name")]
    public string FullName { get; set; }

}

Достаточно просто?

Затем у меня есть следующий класс, который подключается к БД:

   public class DBEntities : DbContext {
        public DbSet<Profile> Profiles { get; set; }
    }

Затем в моем контроллере учетных записей фактически это тот же контроллер, созданный VS2010, когда вы выбираете новый проект MVC3.

 [HttpPost]
 public ActionResult  Register(RegisterModel model) {
            if (ModelState.IsValid) {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
                Profile pm = new Profile();
                pm.username=model.UserName;
                pm.FullName="unknown";

                db.Profiles.Add(pm);
                db.SaveChanges();



                if (createStatus == MembershipCreateStatus.Success) {
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                    return RedirectToAction("Index", "Home");
                } else {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

ТАК, когда я запускаю это приложение, оно выполняется без исключений. Если я добавлю нового пользователя, новый пользователь будет добавлен в таблицы членства asp.net. Насколько я понимаю, структура Entity должна создать таблицу с именем «Профиль» с двумя столбцами «имя пользователя» и «полное имя».

Однако это не так. Почему код может проходить без исключений, db.SaveChanges() может проходить, а таблица не создается?

Что я делаю не так?

редактировать: я думаю, что таблица существует, потому что, если я попытаюсь создать запись с тем же именем пользователя (очевидно, не могу, поскольку это первичный ключ), она выдает исключение, говорящее, что запись уже существует.

НО я не могу найти таблицу!


person masfenix    schedule 05.05.2011    source источник


Ответы (1)


Вы используете EF 4.1, и такое поведение ожидается. Вы используете существующую базу данных, и в этом случае EF не будет создавать для вас таблицы. EF с функциями по умолчанию может создавать только базу данных и все таблицы вместе. API членства не использует EF, поэтому ваш второй тест не работает на членстве (имя пользователя должно быть уникальным), а не на EF.

Чтобы решить вашу проблему, вы должны либо создать таблицы в базе данных вручную, либо позволить EF создать базу данных, что будет немного сложнее, поскольку ему придется создавать для вас все связанные таблицы ASP.NET. Один из способов сделать это — записать эти таблицы во внешний файл SQL и выполнить этот файл в пользовательском инициализаторе. Для пользовательского инициализатора проверьте этот ответ. Этот способ не любит скрипты, содержащие команду GO. Если вы хотите использовать скрипт с командой GO, вы должны использовать объекты управления SQL Server для выполнения сценария (SMO).

person Ladislav Mrnka    schedule 06.05.2011
comment
Как создать отдельную БД? - person masfenix; 06.05.2011
comment
Вы не будете создавать БД, если хотите, чтобы EF генерировал для вас БД и таблицы. - person Ladislav Mrnka; 06.05.2011