Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 实体框架-逆向工程代码优先-覆盖更改_Asp.net Mvc_Entity Framework_Ef Code First - Fatal编程技术网

Asp.net mvc 实体框架-逆向工程代码优先-覆盖更改

Asp.net mvc 实体框架-逆向工程代码优先-覆盖更改,asp.net-mvc,entity-framework,ef-code-first,Asp.net Mvc,Entity Framework,Ef Code First,我正在使用EF电动工具对现有数据库进行逆向工程。这很好。在EDMX Database-1st Route下,我将为任何覆盖(如数据注释)创建分部类,例如,此处,LedgerPeriod为原始EntityObject: [MetadataType(typeof(LedgerPeriodMetaData))] public partial class LedgerPeriod { public class LedgerPeriodMetaData { [Requir

我正在使用EF电动工具对现有数据库进行逆向工程。这很好。在EDMX Database-1st Route下,我将为任何覆盖(如数据注释)创建分部类,例如,此处,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 Engineering是否使用相同的方法,或者是否有任何自定义设置,如果您必须多次运行电动工具,因为假设我向数据库中添加了一个新表,它将不会覆盖以前创建的现有模型的任何更改

这最终意味着我可以对实际的模型类本身进行更改,而不是创建分部类

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


代码优先并不正式支持逆向工程场景,这就是为什么它被称为代码优先。电动工具很不错,但正如你所说,它们会覆盖一切。EF Code First的设计使您可以对模型本身进行更改,而不是对部分和元数据进行更改(尽管您仍然可以根据需要使用这些更改)

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

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


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

嘿,Mystere,谢谢!是的,我使用ViewModels。我甚至没有想过在那里装饰它们(我主要使用ViewModels将多个模型传递给视图)。我在那里有一个“拍我的头”的时刻。我将使用我的ViewModels。。。。再次感谢。作为参考,有一个比电动工具更好的反向发电机。它支持partials。试一试: