我有一個使用表單身份驗證的MVC4互聯網應用程序。MVC4項目 - 不能DropCreateDatabaseIfModelChanges
出在Account模型文件中創建UserProfile
模型的盒子,我感動的是它自己的文件,並在我的DbContext
文件名爲DbSet<UserProfile
>。我期望EF創建一個2表數據庫,UserProfiles和Stories。
public class MySocialStoriesDb : DbContext
{
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Story> Stories { get; set; }
}
故事模式
[Table("Stories")]
public class Story
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int StoryId { get; set; }
public int UserId { get; set; }
[ForeignKey("UserId")]
public virtual UserProfile User { get; set; }
public string File { get; set; }
public DateTime DateCreated { get; set; }
public string Name { get; set; }
}
用戶配置型號
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
public string UserDirectory { get; set; }
public bool Paid { get; set; }
public DateTime DatePaid { get; set; }
public string PaymentId { get; set; }
}
我已經運行從包管理器啓用的遷移,並允許自動遷移,並允許dataloss。生成的InitialCreate文件似乎只創建用戶配置文件表,它的代碼中沒有任何東西表。
添加以下行的Global.asax
Database.SetInitializer(new Models.IntializeMySocialStoriesDb());
如果我現在改變對數據庫的修改模型罷了。如果我手動刪除數據庫並將InitializeMySocialStoriesDb
更改爲DropCreateDatabaseAlways,然後運行該應用程序,則不會創建數據庫。
我只是想知道我錯過了什麼。
我想在開發期間使用EF生成所有的表結構。所以如果事情發生變化,在初始開發過程中字段會被添加等。無論如何,直到數據成爲現場數據都是垃圾。 – James 2013-04-23 11:09:50
當您調試應用程序時,Visual Studio仍然會自動創建並更改表結構。您可以在SSDT中添加新字段(列),然後刷新您的EDMX。表格結構會自動改變,但仍然會改變數據。 SSDT項目也受源代碼控制,因此模式也受版本控制。 – Monstieur 2013-04-23 11:11:06
我會稍微閱讀一下VS中的SQL Server數據庫項目(如果它只是一個單獨項目中的edmx,可能沒有太多東西要學習)。我在另一個項目中使用了代碼優先,沒有問題,但仍然有興趣查看這次使用它出了什麼問題。 – James 2013-04-23 11:16:02