3

EFPowerToolsを使用して既存のデータベースをリバースエンジニアリングしています。これで結構です。EDMXデータベース-1番目のルートでは、データ注釈などのオーバーライド用の部分クラスを作成します。たとえば、ここでは、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

4

1 に答える 1

6

Code Firstは、リバースエンジニアリングシナリオを公式にサポートしていません。そのため、CodeFirstと呼ばれています。動力工具は素晴らしいですが、あなたが言うように、それらは物事を上書きします。EF Code Firstは、パーシャルやメタデータではなく、モデル自体に変更を加えるように設計されています(ただし、必要に応じてそれらを使用することもできます)。

EF Power Toolsのリバースエンジニアリングテンプレートのカスタマイズ機能を使用してから、T4テンプレートを変更して、生成されたクラスに部分的な宣言を追加するか、コードを追加して特定のエンティティをテストし、必要に応じて変更することができます。

ただし、実際には、これを行う必要はありません。エンティティをビューに渡すことは悪い設計と見なされ、それがこれらの属性をモデルに追加する唯一の理由になります。その上、ビューにデータモデルと同じ要件を強制することになりますが、これも悪い選択です。

代わりに、ビューで専用のビューモデルを使用し、データ属性をビューモデルに配置する必要があります。

于 2012-10-10T19:34:26.763 に答える