Как указать имя базы данных в Code First? - PullRequest
53 голосов
/ 18 марта 2011

Как мне сказать EF, как назвать базу данных и куда ее поместить?

Если в файле Web.Config нет строки подключения, он пытается поместить ее на локальный сервер SQLEXPRESS, но я хочу разместить ее на известном SQL-сервере и назвать ее так, как я хочу. Есть предложения?

Ответы [ 7 ]

56 голосов
/ 18 марта 2011

Создайте строку соединения в app.config / web.config с тем же именем, что и у контекста, и EF будет использовать эту БД.

23 голосов
/ 08 марта 2012

Как использовать другое имя строки подключения с EF

EF будет использовать имя базы данных в строке подключения. Если вы хотите отделить имя вашей строки подключения от EF, вам нужно предоставить строку подключения конструктору. Пример:

public class DatabaseContext : DbContext
{
    public DatabaseContext() 
      : base(ApplicationParameters.ConnectionStringName)
    {
    }

    public DatabaseContext(string connectionStringName)
      : base(connectionStringName)
    {
    }

}
17 голосов
/ 12 мая 2014

в классе:

public class Context : DbContext
{
    //SET CONNECTION STRING NAME FOR DataBase Name :
    public Context() : base("YourConnectionName") { }

    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
}

в web.config:

<connectionStrings>  
    <add name="YourConnectionName" connectionString="Data Source=A-PC\SQLEXPRESS;
    Initial Catalog=MyDataBase; Integrated Security=True" 
    providerName="System.Data.SqlClient" />
</connectionStrings>  

Спасибо ferventcoder.

7 голосов
/ 25 марта 2011

В качестве альтернативы вы можете установить имя в конструкторе DbContext.

3 голосов
/ 02 февраля 2017

Как уже упоминалось, вы можете объявить строку подключения в файле конфигурации вашего приложения с именем (скажем, "YourDBName" ), а затем передать его вызову базового конструктора DbContext (Iдобавит это к ответу для предоставления полного ответа - отличные ответы уже даны по этому вопросу.

В качестве альтернативы, вы можете установить это программно в своем классе расширений DbContext, используя свойство Database.Connection.ConnectionString.Например:

App.config:

<!-- More.... -->
<!-- You can do this in a declarative way -->
<connectionStrings>
  <add name="YourDBName"
       connectionString="<Your connection string here>"
       providerName="<Your provider here>" />
</connectionStrings>
<!-- More.... -->

DatabaseContext.cs:

public class DatabaseContext : DbContext
    //Link it with your config file
    public DatabaseContext () : base("YourDBName") 
    {
        //And/Or you can do this programmatically.
        this.Database.Connection.ConnectionString = "<Your Connection String Here>";
        // More Stuff.....
    }
}
1 голос
/ 18 марта 2011

Если вы указываете строку подключения на существующую базу данных, EF «сначала код» не будет пытаться создать ее автоматически.

EF «сначала код» использует соглашение, согласно которому классы контекста по умолчанию ищут строку подключения, имя которой совпадает с именем класса контекста.

Сначала используйте код ef с существующей базой данных

0 голосов
/ 26 марта 2015

Для справки, вот как это сделать в коде, используя VB.NET:

Public Class DatabaseContext : Inherits DbContext

Public Property Users As DbSet(Of User)

Public Sub New()
    MyBase.New("NewFileName.sdf")
End Sub

Конечный класс

...