我建立使用數據庫第一種方法使用實體框架的DbContext一個ASP.NET MVC的Web應用程序。數據庫,第一種方法和修改數據庫架構
如果在某些條件下,我需要修改數據庫如添加新表或修改現有的表(添加列或改變列的數據類型),應該I:
- 刪除現有的實體的.edmx和.tt文件夾並再次重新創建映射
- 修改數據庫後手動將修改應用於.tt文件夾下的模型類
- 這兩個選項都不是有效的。
我應該如何接近修改我的數據庫架構的任務嗎?
編輯 例如我有添加了* IsManagedBy *輔助methodand的[MetadataType(typeof運算其被自動的.TT文件夾下創建,考慮裸露以下部分類(Books_validation ))]到它: -
[MetadataType(typeof(Books_validation))]
public partial class Book
{
public Book()
{
this.Assessments = new HashSet<Assessment>();
this.Users_Books = new HashSet<Users_Books>();
}
public int BookID { get; set; }
public string BookName { get; set; }
public string ManagedBy { get; set; }
public byte[] Timestamp { get; set; }
public virtual ICollection<Assessment> Assessments { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Users_Books> Users_Bookes { get; set; }
public bool IsManagedBy(string userName)
{
return ManagedBy.Equals(userName,
StringComparison.OrdinalIgnoreCase);
}
}
然後我創建Book_validation類應用數據的註解如下: -
public class Books_validation
{
[Required(ErrorMessage = "Name is required")]
public string BookName { get; set; }
public string ManagedBy { get; set; }
[ConcurrencyCheck]
[Timestamp]
public Byte[] Timestamp { get; set; }
}
這種方法造成三個問題: -
1.的IsManagedBy輔助方法不能在Book_validation類中定義並我應該在自動生成的書部分類,這意味着它將如果被刪除定義它我重新生成代碼!!!
2.如果例如我修改了與Book類有關的評估表(通過外鍵),然後我從.edmx設計器中選擇了「從數據庫更新模型」選項;那麼Visual Studio也會重新生成Book類,這會給我帶來更多麻煩。
3.即使是[MetadataType(typeof運算(Books_validation))]其中i的自動生成的代碼寫到也將在我的情況下重新生成代碼移除,因此這意味着,我必須去在所有修改類併爲它們添加關聯的MetadataType(typeof)。
當我使用ObjectContext模板時,所有這些問題都沒有發生,因爲ObjectContext模板不會自動生成部分類,它只會生成模型類,然後我可以爲它們添加部分類和元類型...所以我認爲最好是返回ObjectContext而不是DBContext !!!,對此有何建議以及上述問題? BR
我試圖從數據庫表中刪除一個字段,然後我使用「從數據庫更新模型」,我選擇了我修改過的表格,但我注意到Visual Studio重新創建了表示修改過的模型類表和通過FK關係連接到這個表的所有類以及我在.tt文件夾下的類內創建的所有數據註釋和幫助器方法都被刪除了...所以我如何避免這兩個問題(影響其他表格和保存數據註釋和輔助方法)。 BR – 2012-01-30 23:17:13
@johnG:我已經讀了幾次你的評論,恐怕我不明白你在說什麼。它如何影響其他表格?你失去了哪些輔助方法?請用一些代碼更新您的問題,以顯示您正在討論的內容的一些示例。 – StriplingWarrior 2012-01-31 00:01:51
感謝StriplingWarrior,我編輯了我的帖子,使其更清晰。 BR – 2012-01-31 03:58:15