Ответ 1
Создайте строку подключения в app.config/web.config с тем же именем, что и контекст, и EF будет использовать эту БД.
Как сообщить EF, что назвать базу данных и где ее поместить?
Если в Web.Config нет строки подключения, она пытается поместить ее на локальный сервер SQLEXPRESS, но я хочу поместить ее на известный SQL-сервер и называть ее тем, что я хочу. Любые предложения?
Создайте строку подключения в app.config/web.config с тем же именем, что и контекст, и 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; }
}
в web.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.
Если вы укажете свою строку соединения в существующей базе данных, тогда EF "code first" не будет пытаться создать ее автоматически.
EF "code first" использует соглашение, в котором классы контекста по умолчанию ищут строку соединения, которая имеет то же имя, что и класс контекста.
Как уже упоминалось, вы можете объявить свою строку соединения внутри файла конфигурации вашего приложения с именем (например, "YourDBName" ), а затем передать это вызову базового конструктора DbContext
(я добавлю это в ответ за предоставление полного ответа - большие ответы, уже даваемые на этом).
В качестве альтернативы вы можете установить это программно в своем классе DbContext
Extension, используя свойство 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.....
}
}
Для справки, вот как это сделать в коде с помощью VB.NET:
Public Class DatabaseContext : Inherits DbContext
Public Property Users As DbSet(Of User)
Public Sub New()
MyBase.New("NewFileName.sdf")
End Sub
Конечный класс