我建立使用数据库第一种方法使用实体框架的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