实体框架数据库首先再生让我失去手动更改(Entity Framework Database Firs

2019-08-17 17:16发布

我正在与MVC .NET网站。

因为我是一个老派的程序员谁学会先设计数据库时,我选择了数据库的第一种方法。 我还使用“代码生成”,其与扩展创建文件.tt 。 一切工作,到目前为止,除了botters我一个东西。

经典场景:

  • 我意识到,我很想念一个场
  • 我加入数据库中的字段。
  • 我进入EDMX并选择更新从数据库模型。

然后,我回到我的代码,并使用像我把模型场的顶部被拆除的特殊显示名称标签工作的事情。

例如,如果我有这样的:

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管理这一点,但它很快就会unmanagable。

谢谢

Answer 1:

不要编辑生成的文件。 永远。 只是。 别。 做。 它。

相反,使部分文件的编辑在不同的目录。 要添加的属性,你的部分类定义的顶部声明一个元数据类。

[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; } 
}


Answer 2:

没有,没有办法来编辑生成的代码,而不必当您重新生成所取代。 这就是为什么代码中有警告遍,说不能编辑它。

你可以,但是,使用部分类添加额外的功能。 如果你不知道的部分类是什么,然后了解它在这里:

http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.80).aspx

如果你想添加的属性,那么你必须用一种特殊的局部类的所谓“伙伴类”。

http://hartzer.wordpress.com/2010/01/26/mvc-buddy-class/



文章来源: Entity Framework Database First regeneration make me lose manual changes