实体框架数据库第一次再生使我失去手动更改

本文关键字:失去 框架 数据库 第一次 再生 实体 | 更新日期: 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/