Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 获取实体框架以生成我的表_Entity Framework 4_Ef Code First - Fatal编程技术网

Entity framework 4 获取实体框架以生成我的表

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

我试图让实体框架代码首先为我创建一个数据库,但似乎在实际创建表时遇到了问题

在我的Web.Config中,我设置了连接字符串,并指向没有设置表的数据库:

    <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();
    }
}