2016-06-08 7 views
0

Я пытаюсь использовать code-first в Entity Framework для создания базы данных, но она не работает. Вот моя строка соединения в app.config консольном приложении:Entity Framework code-first не создает базу данных

<add name="BlogDbContext" 
    connectionString="data source=myserver; initial catalog=CodeFirstDemo; integrated security=SSPI" 
    providerName="System.Data.SqlClient" /> 

и вот мой код program.cs файла:

using System.Data.Entity; 

namespace CodeFirstDemo 
{ 
    public class Post 
    { 
     public int PostId { get; set; } 
     public System.DateTime DatePublished { get; set; } 
     public string Title { get; set; } 
     public string Body { get; set; } 
    } 

    public class BlogDbContext : DbContext 
    { 
     public DbSet<Post> Posts { get; set; } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
     } 
    } 
} 

В менеджере пакетов консоли я пробовал: enable-migration, то add-migration, то update-database .. но ничего не произошло.

Я попытался строки соединения, как предложено в других подобных вопросов:

<add name="CodeFirstDemo.BlogDbContext" 
    connectionString="data source=myserver; initial catalog=CodeFirstDemo; integrated security=SSPI" 
    providerName="System.Data.SqlClient" /> 

Любые идеи?

+0

Когда вы говорите «ничего не случилось», вы имеете в виду, что вы вообще не получили никакого ответа от команд на консоли? они должны были либо дать вам сообщения об успехе или неудачах, по крайней мере ..... – Claies

+0

@Claies это то, что я получаю: укажите флаг «-Verbose» для просмотра операторов SQL, применяемых к целевой базе данных. Отсутствие ожидающих явных миграций. Метод бегущего семени. – Karla

+0

, и когда вы используете флаг '-Verbose', он показывает инструкции SQL? – Claies

ответ

0

Добавить пустой конструктор со следующей подписью, чтобы ссылаться на строку соединения вы уже добавили в свой app.config:

public BlogDbContext() 
     : base("Name=BlogDbContext") 
    { 
    } 

Вам не нужно использовать миграцию для создания database.You может делать Я показываю ниже в вашем Main метод:

using (var context = new BlogDbContext()) 
{ 
    context.Database.CreateIfNotExists(); 
} 
+0

В примерах в Интернете не указан вызов базового класса. Они просто используют его так же, как и я, и он создает базу данных. Я не думаю, что вам действительно нужно это делать. База данных создается после вызова: update-database из консоли менеджера пакетов – Karla

+0

, но ваша база данных еще не создана, когда вы выполнили добавление-миграцию, сравнивать нечего. поэтому вам нужно сначала создать свою базу данных.После этого, если вы измените свою модель, вызовите команды add-migration и update-database для обновления базы данных с новыми изменениями. – octavioccl

+0

Проверьте эту страницу: https: //msdn.microsoft.com/en-us/data/jj193542. ASPX. Это доказывает то, что я объясняю выше в своем комментарии. – octavioccl

-1

Поскольку вы используете код-первых, вы должны иметь эти коды, которые похожи друг на друга в следующем примере:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<Post>().ToTable("Post"); 
      base.OnModelCreating(modelBuilder); 
    } 

Они создадут таблицу базы данных ваших объектов.

+0

Это не влияет на создание базы данных. Нет необходимости переопределять OnModelCreating для EF для выполнения своей работы. Это необходимо только для изменения поведения по умолчанию, когда требуется что-то другое. –

+0

Правильно Я понимаю, может ли проблема, что строка соединения OP недействительна? –

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