实体框架数据库第一次再生使我失去手动更改
本文关键字:失去 框架 数据库 第一次 再生 实体 | 更新日期: 2023-09-27 18:04:38
我正在用MVC . net制作一个网站。
因为我是一个老派的程序员,首先学习设计数据库,所以我选择了数据库优先的方法。我还使用"代码生成"来创建扩展名为.tt
的文件。到目前为止,一切都很顺利,只有一件事让我困扰。
经典场景:
- 我意识到我错过了一个字段
- 我在数据库中添加字段。
- 我进入edmx并选择从数据库更新模型。
然后我回到我的代码和东西用来工作,像特殊的DisplayName标签,我放在模型字段的顶部被删除。
例如:
public partial class Blog
{
public Blog()
{
this.BlogComments = new HashSet<BlogComment>();
}
public int IDBlog { get; set; }
public string Title { get; set; }
[AllowHtml]
public string Content { get; set; }
public System.DateTime DateCreated { get; set; }
public string Author { get; set; }
public virtual ICollection<BlogComment> BlogComments { get; set; }
}
它将变成
public partial class Blog
{
public Blog()
{
this.BlogComments = new HashSet<BlogComment>();
}
public int IDBlog { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public System.DateTime DateCreated { get; set; }
public string Author { get; set; }
public virtual ICollection<BlogComment> BlogComments { get; set; }
}
这是因为[AllowHtml]
是在上一代模型之后添加的。是否有一种方法来更新表,而不是删除所有的标签,我添加后的一代?我该怎么做呢?
现在,我通过在SVN上做一些恢复来管理这个问题,但是很快它就无法管理了。
谢谢
不要编辑生成的文件。永远。而已。不喜欢。做的。它。
相反,在不同目录下的部分文件中进行编辑。要添加属性,请在部分类定义的顶部声明一个Metadata类。
[MetadataType(typeof(BlogMetadata))]
public partial class Blog
{
// it's possible to add logic and non-mapped properties here
}
现在在元数据类中,您可以定义属性或其他逻辑:
public class BlahMetadata
{
[AllowHtml]
public string Content{ get; set; }
}
不,没有办法编辑生成的代码而不让它在您重新生成时被替换。这就是为什么代码中到处都有警告,说不要编辑它。
但是,您可以使用分部类来添加额外的功能。如果您不知道什么是分部类,请阅读此处:http://msdn.microsoft.com/en-us/library/wa80x488 (v = vs.80) . aspx
如果你想添加属性,那么你必须使用一种特殊的局部类,称为"伙伴类"。
http://hartzer.wordpress.com/2010/01/26/mvc-buddy-class/