2011-12-16 23 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解決)。