我使用以下DbContext
设置了Code Firstent_rel1('sam', 'helsen', 4)
ent_rel1('sam', 'helsen', 3)
我还设置了连接字符串来查看(本地)数据库
public class MyDatabaseDbContext : DbContext
{
public MyDatabaseDbContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
public MyDatabaseDbContext()
: base("MyDatabase")
{
}
public DbSet<MyTable> MyTables { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
还在Global.asax
中设置初始值设定项<connectionStrings>
<add name="MyDatabase"
connectionString="Server=(local);Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
然后我运行应用程序并调用DbContext(在我的情况下来自控制器)
Database.SetInitializer<MyDatabaseDbContext>(new DropCreateDatabaseAlways<MyDatabaseDbContext>());
我收到以下错误消息
EntityFramework.dll中发生了'System.Data.SqlClient.SqlException'类型的异常但未在用户代码中处理
其他信息:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:50 - 发生本地数据库运行时错误。无法获取本地应用程序数据路径。很可能未加载用户配置文件。如果在IIS下执行LocalDB,请确保启用了配置文件加载当前用户。
On Debugging并查看dbContext变量&gt;数据库&gt;连接&gt; ConnectionString属性我看到以下内容: “Data Source =(localdb)\ v12.0; AttachDbFilename = | DataDirectory | MyDatabase.mdf; Initial Catalog = MyDatabase; Integrated Security = True; MultipleActiveResultSets = True”
问题
为什么它指向(localDb)\ v12.0数据库而不是我的连接字符串? 即便如此,为什么不在那里创建数据库,因为这是在我的开发机器上?
我是否忘记了我需要设定的某种惯例。
答案 0 :(得分:2)
您的连接字符串需要命名为MyDatabaseDb 要么 您的上下文类需要命名为MyDatabaseContext。
实体框架的约定是上下文类查找具有相同名称+上下文的连接字符串。你班级名字中的Db是无关紧要的。