我使用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
答案 0 :(得分:6)
Code First并未正式支持逆向工程方案,这就是为什么它被称为Code First。电动工具很不错,但正如你所说,它们会覆盖一些东西。 EF Code First的设计使您可以对模型本身进行更改,而不是对部分和元数据进行更改(尽管如果您愿意,仍然可以使用这些更改)。
您可以使用EF Power Tools的自定义反向工程师模板功能,然后修改T4模板以向生成的类添加部分声明,或者您可以添加代码以测试特定实体并根据需要修改它们
然而,实际上,你不应该这样做。将您的实体传递给您的视图被认为是糟糕的设计,这是将这些属性添加到模型的唯一原因。最重要的是,您强制您的视图与数据模型具有相同的要求,这也是一个糟糕的选择。
您应该使用包含视图的专用视图模型,并将数据属性放在视图模型上。