我希望确保实体框架永远不会覆盖或尝试创建我要连接的数据库。它是以前由ASP网站访问的已建立的数据库(可视化基本脚本风格)。我已经看到了你通过的约定" name ="像这样进入基础构造函数...
//example 1
public class SchoolDBContext: DbContext
{
public SchoolDBContext() : base("name=SchoolDBConnectionString")
{
}
}
但是我宁愿没有HARDCODED(如上所述),所以也许......
//example 2
public SchoolDBContext(string ConnectionString) : base("name=" + ConnectionString) {
}
但我也希望能够在字符串为空的情况下发现错误......
//example 3
public SchoolDBContext(string ConnectionString) : {
if (string.IsNullOrWhitespace(ConnectionString) throw Exception("empty connection string");
base("name=" + ConnectionString);
}
问题1:我不确定第三位代码是否与第二位代码完成相同的工作,是吗?由于第三个例子可以在使用" name ="
调用base之前调用无参数构造问题2:构造函数中是否有可用于更强大地配置EntityFramework的选项?
我使用EF 6
答案 0 :(得分:1)
如果您不希望EF覆盖och,每次需要添加createinitializer类时都会创建一个新数据库。
public class CreateInitializer : CreateDatabaseIfNotExists<SchoolDBContext>{}
答案 1 :(得分:1)
问题1:
我也不确定。我需要承认我在例子中从未见过类似的东西。您可以告诉我们/我您的文档来源或您是如何想出这个想法的吗?
问题2: 如果你不是一个独立构造函数,那你试试这个怎么样?
public SchoolDBContext()
: base(ConnectionString == null ? "name=SchoolDBConnectionString" : WhateverYouDoIfItsWrong)
{
// Your code here! Lucky you
}
答案 2 :(得分:1)
您可以创建一个新类SchoolDbContextConfiguration类,它继承自它并将AutomaticMigrationsEnabled设置为false。
internal sealed class Configuration : DbMigrationsConfiguration<SchoolDBContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
在您的SchoolDbContext中初始化如下:
public SchoolDBContext(string ConnectionString) : base("name=" + ConnectionString) {
var init = new MigrateDatabaseToLatestVersion<SchoolDBContext, SchoolDbContextConfiguration>(true);
Database.SetInitializer(init);
}