Entity framework 4 获取实体框架以生成我的表
我试图让实体框架代码首先为我创建一个数据库,但似乎在实际创建表时遇到了问题 在我的Web.Config中,我设置了连接字符串,并指向没有设置表的数据库:Entity framework 4 获取实体框架以生成我的表,entity-framework-4,ef-code-first,Entity Framework 4,Ef Code First,我试图让实体框架代码首先为我创建一个数据库,但似乎在实际创建表时遇到了问题 在我的Web.Config中,我设置了连接字符串,并指向没有设置表的数据库: <connectionStrings> <add name="DataContext" connectionString="Server=.\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=Yes;" providerName="System.Data.Sql
<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
所有的东西都可以编译并工作,但是数据库表从来没有为我生成过。通过在线阅读,我认为这可能是由于Database.SetInitializer,但我不确定它应该调整为什么
任何能为我指明正确方向的帮助都会很好!我在家里的电脑上运行这个项目,但在另一台电脑上运行这个项目就是因为某些原因而不起作用——典型的
谢谢,
Rich我认为在设置初始值设定项时需要使用DataContext类型:
Database.SetInitializer<DataContext>(new DataContextInitializer())
在为表数据设定种子时,需要保存更改:
protected override void Seed(DataContext context)
{
// create roles
var roles = new List<Role>{
new Role{RoleName = "Administrator"}, // admin area: admin user
new Role{RoleName = "User"}, // admin area: normal user
new Role{RoleName = "Client"} // front end: normal user
};
roles.ForEach(r => context.Roles.Add(r));
context.SaveChanges(); // save changes to db
}
好了,终于成功了。感谢Ladislav Mrnka提供的链接,我将我的global.asax更改为:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
var initr = new DataContextInitializer();
Database.SetInitializer<DataContext>(new DataContextInitializer());
using (var db = new DataContext())
{
db.Database.CreateIfNotExists();
}
using (var db1 = new DataContext())
{
initr.Seed(db1);
}
}
我还根据BumbleB2na的建议调整了DataContextInitializer。完成的类如下所示:
public class DataContextInitializer : CreateDatabaseIfNotExists<DataContext>
{
public void Seed(DataContext context)
{
// create roles
var roles = new List<Role>{
new Role{RoleName = "Administrator"}, // admin area: admin user
new Role{RoleName = "User"}, // admin area: normal user
new Role{RoleName = "Client"} // front end: normal user
};
roles.ForEach(r => context.Roles.Add(r));
context.SaveChanges();
}
}
如果我让实体框架为我创建数据库,而不是在运行代码之前自己创建数据库,那么它现在可以完美地工作。希望这对其他人有帮助 嗨,谢谢你的评论。我看了一眼,做了些改变,但还是一无所获。我是否需要调整sql server用户权限?哦,当您为表数据设定种子时,您缺少“context.SaveChanges”检查此答案:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
var initr = new DataContextInitializer();
Database.SetInitializer<DataContext>(new DataContextInitializer());
using (var db = new DataContext())
{
db.Database.CreateIfNotExists();
}
using (var db1 = new DataContext())
{
initr.Seed(db1);
}
}
public class DataContextInitializer : CreateDatabaseIfNotExists<DataContext>
{
public void Seed(DataContext context)
{
// create roles
var roles = new List<Role>{
new Role{RoleName = "Administrator"}, // admin area: admin user
new Role{RoleName = "User"}, // admin area: normal user
new Role{RoleName = "Client"} // front end: normal user
};
roles.ForEach(r => context.Roles.Add(r));
context.SaveChanges();
}
}