4

ASP.NET MVC2 は、エンティティでの属性の使用を強力にサポートしています (検証、Html ヘルパー クラスの拡張など)。

VS2010 EF4 エンティティ データ モデル (edmx とその cs クラス) を使用してデータベースからモデルを生成した場合、いくつかのエンティティに属性を追加したいと考えています。ベストプラクティスは何ですか?モデルの更新 (データベースにフィールド/テーブルを追加し、それらを edmx にマージする) にどのように対処すればよいですか?属性を保持するか、すべてを消去する新しい cs ファイルを生成しますか?

(このファイルを手動で変更すると、アプリケーションで予期しない動作が発生する可能性があります。)

(このファイルへの手動変更は、コードが再生成されると上書きされます。)

4

3 に答える 3

4

通常、部分クラスと呼ばれるものを作成して、自動生成されたオブジェクトを拡張します。

生成されたクラスへの属性の追加

于 2011-01-06T20:45:11.667 に答える
1

上にリンクされている「バディ クラス」の概念とデータ注釈を使用して、この拡張メソッドを使用します。どこで手に入れたのか忘れてしまったので、原作者に敬意を表します。

私たちはそれを次のように使用します

 List<ValidationResult> errorList = new List<ValidationResult>();
        bool bValid = client.IsValid<Client, ClientMetadata>(ref errorList, false);


    public static bool IsValid<T, U>(this T obj, ref List<ValidationResult> errors, bool validateAllProperties = true) where T : IValidatableObject
    {
        //If metadata class type has been passed in that's different from the class to be validated, register the association
        if (typeof(T) != typeof(U))
        {
            TypeDescriptor.AddProviderTransparent(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(T), typeof(U)), typeof(T));
        }

        var validationContext = new ValidationContext(obj, null, null);
        var validationResults = new List<ValidationResult>();
        Validator.TryValidateObject(obj, validationContext, validationResults, validateAllProperties);

        errors = validationResults;

        if (validationResults.Count > 0)
            return false;
        else
            return true;
    }
于 2011-01-09T02:49:13.437 に答える
0

部分クラスを使用しますが、それらを保持して EF で処理する必要がある場合は、[データベースからモデルを更新] オプションが最適です。

于 2011-01-06T20:44:46.690 に答える