【问题标题】:Entity Framework - Reverse Engineer Code First - Overwriting Changes实体框架 - 逆向工程代码优先 - 覆盖更改
【发布时间】:2012-10-10 19:14:42
【问题描述】:

我正在使用 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; }

    }
}

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

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

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

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

【问题讨论】:

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


【解决方案1】:

Code First 并未正式支持逆向工程方案,这就是它被称为 Code First 的原因。电动工具很好,但正如你所说,它们会覆盖东西。 EF Code First 旨在让您对模型本身进行更改,而不是对部分和元数据进行更改(尽管您仍然可以根据需要使用它们)。

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

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

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

【讨论】:

  • 嘿,神秘人,谢谢!是的,我使用 ViewModels。我什至没有想过在那里装饰它们(我主要使用 ViewModels 将多个模型传递给视图)。我在那里有一个“拍我的头”的时刻。我将使用我的 ViewModels....再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
相关资源
最近更新 更多