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

gar*_*daz 3 asp.net-mvc entity-framework ef-code-first

我正在使用EF Power Tools对现有数据库进行逆向工程.这可以.在EDMX Database-1st Route下,我将为Data Annotations等任何覆盖创建部分类,例如,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; }

    }
}
Run Code Online (Sandbox Code Playgroud)

这可以.现在我对Code First Reverse Engineer使用相同的方法,还是有任何自定义设置,如果你必须多次运行电动工具,因为我向数据库添加了一个新表,它不会覆盖对数据库的任何更改以前创建的现有模型.

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

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

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

Eri*_*sch 6

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

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

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

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