3

我正在使用 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 进行一些还原来管理它,但它很快就会变得无法管理。

谢谢

4

2 回答 2

12

不要编辑生成的文件。曾经。只是。不。做。它。

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

[MetadataType(typeof(BlogMetadata))]
public partial class Blog
{
    // it's possible to add logic and non-mapped properties here
}

现在在您的 Metadata 类中,您可以定义属性或其他逻辑:

public class BlahMetadata
{
    [AllowHtml] 
    public string Content{ get; set; } 
}
于 2013-03-18T22:27:40.203 回答
1

不,没有办法编辑生成的代码,并且在重新生成时不会被替换。这就是为什么代码到处都有警告说不要编辑它的原因。

但是,您可以使用部分类来添加其他功能。如果您不知道部分类是什么,请在此处阅读:

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

如果要添加属性,则必须使用一种特殊的局部类,称为“伙伴类”。

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

于 2013-03-18T22:28:55.687 回答