实体框架 - 反向工程代码优先 - 覆盖更改

3
我将使用EF Power Tools对现有数据库进行反向工程。在EDMX数据库-1st路线下,我将创建部分类以进行任何覆盖,例如数据注释,例如这里的< strong>LedgerPeriod 是原始EntityObject:
[MetadataType(typeof(LedgerPeriodMetaData))]
public partial class LedgerPeriod
{
    public class LedgerPeriodMetaData
    {

        [Required(ErrorMessage = "Period Start Date Required")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        [DataType(DataType.Date)]
        public object PeriodDateFrom { get; set; }

        [Required(ErrorMessage = "Period End Date Required")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        [DataType(DataType.Date)]
        public object PeriodDateTo { get; set; }

    }
}

这很好。现在我是否可以使用相同的方法来进行“Code First Reverse Engineer”,或者是否有任何自定义设置,如果您必须多次运行Power Tools,因为比如我向数据库添加了一个新表,它不会覆盖先前创建的任何现有模型的更改。
这最终意味着我可以对实际模型类进行更改,而不是创建部分类。
EF Powertools 的参考资料可以在此处找到:

http://blogs.msdn.com/b/adonet/archive/2012/04/09/ef-power-tools-beta-2-available.aspx


参考一下,有一个比电动工具更好的反向生成器。它支持部分。请访问以下网址:http://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838 - Simon Hughes
1个回答

6

Code First并不官方支持反向工程,这也是为什么它被称为Code First。Power Tools很好用,但正如您所说,它们会覆盖一些内容。EF Code First的设计思想是让您对模型本身进行更改,而不是对partials和metadata进行更改(尽管如果您愿意,仍然可以使用它们)。

您可以使用EF Power Tools的“自定义反向工程模板”功能,然后修改T4模板以向生成的类添加partial声明,或者您可以添加代码来测试特定实体并根据需要进行修改。

然而,在现实中,您不应该需要这样做。将实体传递给视图被认为是不良设计,这将是向模型添加这些属性的唯一原因。此外,您强制视图具有与数据模型相同的要求,这也是一个不好的选择。

相反,您应该使用专用的视图模型与您的视图,并在您的视图模型上放置数据属性。


嘿,Mystere Man,谢谢你!是的,我使用ViewModels。我甚至没有想到在那里装饰它们(我主要使用ViewModels将多个模型传递给视图)。我有一个“拍脑袋”的时刻。我会使用我的ViewModels...再次感谢。 - garfbradaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接