我正在使用asp.net和实体框架创建一个基本的MVC应用程序。我一直关注this tutorial,改变数据模型以满足我的需求。
我已经创建了一个数据库模型,并生成了MVC控制器。当我运行应用程序并导航到需要数据库的页面时,当到达控制器中的行return View(db.Servers.ToList());
时,我得到以下错误:
“EntityFramework.dll中出现'System.InvalidOperationException'类型的异常。附加信息:无法为DbContext类型'Purely_Servers.DAL.serverContext,Purely_Servers'设置'Purely_Servers.DAL.serverInitializer,Purely_Servers'类型的数据库初始化程序在应用程序配置中指定。“
有两个内部例外:“使用相对路径时,请确保当前目录正确”和“验证文件是否存在于当前位置”。
我的代码
serverContext.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Purely_Servers.Models;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace Purely_Servers.DAL
{
public class serverContext : DbContext
{
public serverContext() : base("serverContext")
{
}
// create a DbSet property for each entity set
public DbSet<server> Servers {get; set;}
public DbSet<user> Users {get; set;}
public DbSet<faculty> Faculties {get; set;}
public DbSet<admin> Admins {get; set;}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
serverInitializer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using Purely_Servers.Models;
namespace Purely_Servers.DAL
{
public class serverInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<serverContext>
{
protected override void Seed(serverContext context)
{
// create the servers
var servers = new List<server>
{
new server{.......}
};
// add them to the dbcontext
servers.ForEach(s => context.Servers.Add(s));
context.SaveChanges();
// create the admins
var admins = new List<admin>
{
new admin{.....}
};
// add them to the dbcontext
admins.ForEach(a => context.Admins.Add(a));
context.SaveChanges();
// create the users
var users = new List<user>
{
new user{......}
};
// add them to the dbcontext
users.ForEach(u => context.Users.Add(u));
context.SaveChanges();
// create the school
var faculties = new List<faculty>
{
new faculty{.....},
};
// add them to the context
faculties.ForEach(f => context.Faculties.Add(f));
context.SaveChanges();
}
}
}
的Web.config
<connectionStrings>
<add name="serverContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=235Servers;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<contexts>
<context type="Purely_Servers.DAL.serverContext, Purely_Servers">
<databaseInitializer type="Purely_Servers.DAL.serverInitializer, Purely_Servers" />
</context>
</contexts>
</entityFramework>
任何帮助都非常感激。
答案 0 :(得分:0)
从配置中设置数据库初始化程序很难正确,因为您的根命名空间,程序集名称和DLL名称可能都不同。
更强类型的方法是:
public class serverContext: DbContext
{
public serverContext(): base("serverContext")
{
Database.SetInitializer<serverContext>(new serverInitializer());
...
使用此功能,您将删除<context
配置。 (但保留connectionStrings / add config)