2017-11-06 5 views
0

問題: Entityオブジェクトにはデータベースに関連するプロパティがありますが、プログラミング領域のニーズは異なります。それ以上:ASP .NET上のEntity Framework MVC - 属性、メソッド、およびプロパティのエンティティを拡張する

  1. プロパティ - これは一時的なロジックです。
  2. メソッド - クリーンコードとプログラミングの必要性。最後に、まだ重要なこと
  3. - 承認のための属性、表示、フィルタなど

しかし、明らかに私たちは私たちのプログラムは、我々はモデルを更新した直後にコードを書き換える必要があるなしに保守する必要はありません。プロパティとメソッドについては

答えて

1

部分クラスと.NET環境は、我々が望むように私たちはそれらを拡張することができますよう、Entity Frameworkのプラットフォームは、モデルからすべてのオブジェクトを生成:

同じ名前空間で私たちの部分に座ることをチェックすることを忘れないでください(モデルディレクトリや独自のディレクトリにVisual Studioを作成すると、追加の名前空間が作成されます)。

public partial class ErrorLog 
{ 
    public long pk { get; set; } 
    public int lineNumber { get; set; } 
    public Nullable<int> error { get; set; } 
} 

当社の部分:属性について

public partial class ErrorLog 
{ 
    public string getErrorDescription() 
    { 
     return d[(int)error]; 
    } 

    private static Dictionary<int, string> d = new Dictionary<int, string>() 
    { 
     {1,"desc1" }, 
     {2,"desc2" }, 
     {3,"desc3" }, 
     {4,"desc4" } 
    }; 

} 

我々は

public interface IErrorLogsMetaData 
{ 

    [Display(Name = "Id")] 
    long pk { get; set; } 

    [Display(Name = "The line Number")] 
    int lineNumber { get; set; } 

    [Display(Name = "The Error")] 
    Nullable<int> error { get; set; } 


} 

は、私たちのエンティティ(でも拡張)オブジェクト上でそれらを実装する新しいインターフェースを追加することができます。私たちが反映し、使用してのglobal.asaxでそれを予約する必要があることについては :

TypeDescriptor.AddProviderTransparent(
new AssociatedMetadataTypeTypeDescriptionProvider(typeof(ErrorLog), typeof(IErrorLogsMetaData)), typeof(ErrorLog)); 

TypeDescriptor - 私たちのためにおなじみの反射から、その種類についての情報を取得します。 AddProviderTransparent - 部分的に信頼できるコードから呼び出され、関連付けられたクラスからメタデータを取得するメソッドです。

最初のパラメータはプロバイダーで、飾りたい型からのTypeDescriptionProviderと帰属インタフェースです.2番目のパラメータは、解説のターゲット型です。あなたが見ることができるようにあなたがあなた自身のパーシャルクラスを作成できるように

+0

この件については既に説明していますが、+1がそれに該当します。それを行うのは唯一の方法ではないことに注意してください – risa

0

、データベース第1エンティティモデルクラスは、例えば、あなたが持っている場合は、partial次のとおりです。

public partial class SomeClass 
{ 
    public string Prop1 { get; set; } 
    public string Prop2 { get; set; } 
} 

あなたはこのような何かを行うことができます。

はそれがSomeClassPartial、プロジェクトに名前をいくつかのクラスを追加します。

データ・安野を追加することができ、あなたの SomeClassMetadataクラスで
//SomeClassPartial.cs 
namespace YourNamespace 
{ 
    [MetadataType(typeof(SomeClassMetadata))] 
    public partial class SomeClass 
    { 
     //add your new properties/some_logic here 

     public string NewPropX { get; set; } 
     public string NewPropY { get; set; } 
    } 

    public partial class SomeClassMetadata 
    { 
     //metadata for your existing model properties 

     [Display(Name = "Property 1")] 
     public string Prop1 { get; set; } 

     [Display(Name = "Property 2")] 
     public string Prop2 { get; set; } 
    } 
} 

プロパティをMetadataType属性を持つ既存のプロパティに追加します。これにより、データモデルクラスに関連付けるメタデータクラスが指定され、部分的にはSomeClassクラスがあり、その属性をSomeClassMetadataクラスから取得できます。新しいカスタムプロパティを追加するには、SomeClass部分クラスを使用できます。

MSDNリンク:MetadataTypeAttribute Class

関連する問題