Подход Code First в EF не работает для меня - PullRequest
0 голосов
/ 16 декабря 2011

Я пытался работать с подходом Code First в новой Entity Framework, но таблица в базе данных не создается автоматически.

Я уже создал базу данных (в папке App_Code) и использую подход Code First. Объясните мне, мне нужно сначала создать таблицы в БД или они должны быть созданы автоматически?

Ниже приведено описание моего проекта

В Web.config у меня есть 2 строки подключения:

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

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

Класс, описывающий мой объект (в папке Model)

public class UserProfile
{
        [Key]
        [Required]
        public string PhoneNumber { get; set; }

        [Required]
        public string FirstName { get; set; }

        [Required]
        public string MiddleName { get; set; }

        [Required]
        public string Surname { get; set; }

        [Required]
        public DateTime Birthday { get; set; }

        public int PositionId { get; set; }

        public string Boss { get; set; }

        [Required]
        public int CompanyId { get; set; }
}

Класс DbContext (в папке Model)

public class MyDB : DbContext
{
    //public MyDB() : base("MyDB") { }
    public DbSet<UserProfile> UserProfiles { get; set; }
}

В контроллере, пытающемся вставить в базу данных новую (& первую) запись (таблица еще не существует).

UserProfile newProfile = new UserProfile();
newProfile.CompanyId = 1;
newProfile.PhoneNumber = model.PhoneNumber;
newProfile.FirstName = model.FirstName;
newProfile.MiddleName = model.MiddleName;
newProfile.Surname = model.Surname;
newProfile.Birthday = Convert.ToDateTime(model.Birthday);

var myDb = new Models.MyDB();
myDb.UserProfiles.Add(newProfile);
myDb.SaveChanges();

Когда я пытаюсь позвонить SaveChanges(), я получаю исключение:

Сведения об исключении: System.Data.SqlClient.SqlException: Неверное имя объекта 'dbo.UserProfiles'.

1 Ответ

1 голос
/ 16 декабря 2011

Встроенные инициализаторы базы данных EF должны создавать базу данных и все таблицы в базе данных - она ​​не может работать с существующей базой данных, но вы можете создать свой собственный инициализатор, который сможет создавать таблицы в существующей базе данных .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...