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

时间:2012-10-10 19:14:42

标签: asp.net-mvc entity-framework ef-code-first

我使用EF Power Tools 逆向工程现有数据库。这可以。在EDMX数据库第一路线下,我将为数据注释等任何覆盖创建部分类,例如,在这里, 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; }

    }
}

这很好。现在我对代码优先反向工程师使用相同的方法,或者是否有任何自定义设置,如果你必须多次运行电动工具,因为我在数据库中添加了一个新表,它就不会不会覆盖之前创建的现有模型的任何更改。

这最终意味着我可以自己更改实际的模型类,而不是创建部分类。

可在此处找到对EF Powertools的参考:

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

1 个答案:

答案 0 :(得分:6)

Code First并未正式支持逆向工程方案,这就是为什么它被称为Code First。电动工具很不错,但正如你所说,它们会覆盖一些东西。 EF Code First的设计使您可以对模型本身进行更改,而不是对部分和元数据进行更改(尽管如果您愿意,仍然可以使用这些更改)。

您可以使用EF Power Tools的自定义反向工程师模板功能,然后修改T4模板以向生成的类添加部分声明,或者您可以添加代码以测试特定实体并根据需要修改它们

然而,实际上,你不应该这样做。将您的实体传递给您的视图被认为是糟糕的设计,这是将这些属性添加到模型的唯一原因。最重要的是,您强制您的视图与数据模型具有相同的要求,这也是一个糟糕的选择。

您应该使用包含视图的专用视图模型,并将数据属性放在视图模型上。

相关问题