Как сначала указать имя базы данных в коде?


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

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

7 52

7 ответов:

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

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

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

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

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

}

класс :

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; }
}

в интернете.config:

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

спасибо ferventcoder.
Ref = > http://brandonclapp.com/connection-strings-with-entity-framework-5-code-first/

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

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

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

приложение.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.....
    }
}

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

EF "code first" использует соглашение, в котором классы контекста по умолчанию ищут строку подключения, имеющую то же имя, что и класс контекста.

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

для справки, вот как это сделать в коде с помощью VB.NET:

Public Class DatabaseContext : Inherits DbContext

Public Property Users As DbSet(Of User)

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

Класс