2011-12-16 100 views
0

我试图在新的实体框架中使用代码优先方法,但数据库中的表不会自动创建。代码EF中的第一种方法不适用于我

我已经创建了数据库(在App_Code文件夹中),我使用Code First方法。请解释一下,我需要首先在数据库中创建表格,还是应该自动创建表格?

下面是我的项目

的描述在Web.config我有2个连接字符串:

add name="ApplicationServices" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" 

add name="MyDB" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI; AttachDBFilename=|DataDirectory|MyDB.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" 

类描述我对象(在模型文件夹)

public class UserProfile 
{ 
     [Key] 
     [Required] 
     public string PhoneNumber { get; set; } 

     [Required] 
     public string FirstName { get; set; } 

     [Required] 
     public string MiddleName { get; set; } 

     [Required] 
     public string Surname { get; set; } 

     [Required] 
     public DateTime Birthday { get; set; } 

     public int PositionId { get; set; } 

     public string Boss { get; set; } 

     [Required] 
     public int CompanyId { get; set; } 
} 

的DbContext类(在Model文件夹中)

public class MyDB : DbContext 
{ 
    //public MyDB() : base("MyDB") { } 
    public DbSet<UserProfile> UserProfiles { get; set; } 
} 

在控制器尝试向数据库中插入新的(&第一个)记录(表格不存在)。

UserProfile newProfile = new UserProfile(); 
newProfile.CompanyId = 1; 
newProfile.PhoneNumber = model.PhoneNumber; 
newProfile.FirstName = model.FirstName; 
newProfile.MiddleName = model.MiddleName; 
newProfile.Surname = model.Surname; 
newProfile.Birthday = Convert.ToDateTime(model.Birthday); 

var myDb = new Models.MyDB(); 
myDb.UserProfiles.Add(newProfile); 
myDb.SaveChanges(); 

当我试图调用SaveChanges()我得到一个异常:

异常详细信息:System.Data.SqlClient.SqlException:无效的对象名称dbo.UserProfiles“。

+0

尝试删除两个连接字符串。其实它应该会自动创建数据库。 – 2011-12-16 07:33:00

回答

1

内置EF数据库初始化必须创建一个数据库和数据库中的所有表 - 它不能与现有数据库的工作,但你可以建立自己的初始化,这将能够create tables in existing database

代码优先与数据库创建当前期望您可以根据需要多次删除和重新创建数据库,因为没有数据库初始化程序支持更改现有表(这将通过非常有前途的Migrations解决)。

相关问题