2014-12-27 153 views
0

我想在ASP.NET中创建一个简单的项目,'代码优先'代码优先 - 不创建数据库

所以我做了一个类EFDbContext:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 

namespace MVCRubenWouters.Models 
{ 
    public class EFDbContext: DbContext 
    { 
    public EFDbContext() : base("name=rubenwoutersdbCF") 
    { 
     Database.SetInitializer<EFDbContext>(new EFDbInitializer()); 
    } 
     public DbSet<Types> Types { get; set; } 
    } 
} 

而且在 'web.config中'

<connectionStrings> 
    <add name="rubenwoutersdbCF" connectionString="Data Source=.\SQLSERVER2012;Initial Catalog=rubenwoutersdbCF;Integrated Security=True;MultipleActiveResultSets=true" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

然后,我创建了一个类“EFDbInitializer的东西添加到数据库中增加了一个ConnectionString的:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.Entity; 

namespace MVCRubenWouters.Models 
{ 
    public class EFDbInitializer: DropCreateDatabaseAlways<EFDbContext> 
    { 
    protected override void Seed(EFDbContext context) 
    { 
     Types t1 = new Types() 
     { 
     PK_TypeNr = 1, 
     TypeKeuken = "Belgisch", 
     TypeZaak = "Restaurant", 
     Vegetarisch = false 
     }; 

     context.Types.Add(t1); 
     context.SaveChanges(); 
    } 
    } 
} 

当我运行该项目,并转到SQL服务器管理工​​作室(和刷新),没有ne w数据库有..

我在这里做错了什么? :/

+0

您是否已将Mgmt Studio连接到'。\ SQLSERVER2012'实例? – 2014-12-27 15:19:55

+0

@marc_s是的,我做到了。 – RW24 2014-12-27 15:30:35

+0

尝试调用实体框架,如果出现问题,您应该得到关于它的Exception。尝试调用这个:'new EFDbContext()。Types.ToList();' – Dan 2014-12-27 16:20:36

回答

0

我建议你在SQL服务器中创建你的数据库,建立你的表,然后用你的代码填充它们。

+1

我认为Code首先意味着你通过代码创建你的数据库? (这是一个学校的分配,所以它必须是这样的:/) – RW24 2014-12-27 15:14:30

+0

@ user1418016问题首先与代码相关,你的回答没有任何意义。 – Calvedos 2014-12-27 16:29:08

0

,我的系统上运行的方式是强制数据库中的Application_Start()

试试这个:

Database.SetInitializer(new CreateDatabaseIfNotExists<EFDbContext>()); 
     var context = new EFDbContext("Data Source=(local);Integrated Security=SSPI;Initial Catalog=myDB;"); 
     context.Database.Initialize(true); 

我觉得种子方法不会被调用,以确保设置brakpoint

您可以开发自定义初始化器,如下所示链接:

Seed in entity framework然后在Application_Start()中调用它

Database.SetInitializer<EFDbContext>(new EFDbInitializer()); 
相关问题