[英]Entity Framework initialisation best practices
我希望确保实体框架永远不会覆盖或尝试创建我要连接的数据库。 它是以前由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
如果您不希望EF覆盖och,每次需要添加createinitializer类时都会创建一个新数据库。
public class CreateInitializer : CreateDatabaseIfNotExists<SchoolDBContext>{}
问题1:
我也不确定。 我需要承认我在例子中从未见过类似的东西。 您可以告诉我们/我您的文档来源或您是如何想出这个想法的吗?
问题2:如果你不是一个独立构造函数,你试试这个怎么样?
public SchoolDBContext()
: base(ConnectionString == null ? "name=SchoolDBConnectionString" : WhateverYouDoIfItsWrong)
{
// Your code here! Lucky you
}
您可以创建一个新类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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.