2011-01-04 23 views
0

私は2つのプロジェクトを持っています。私のデータベースとEntity Frameworkモデルを含むデータプロジェクト。私は 'User'というテーブルを持っていて、ユーザのために生成されたEFクラスを持っています。ASP.Net(3.5)ルール検証のMVC部分クラス

私は部分クラスを追加しようとしています:

using System; 
using System.Collections.Generic; 
using System.Data.Linq; 
using System.Linq; 
using System.Text; 

namespace Data 
{ 
    public partial class user 
    { 

     public bool isValid 
     { 
      get { 
       return (GetRuleViolations().Count()==0); 
      } 
     } 

     public IEnumerable<RuleViolation> GetRuleViolations() 
     { 
      yield break; 
     } 



     partialvoid OnValidate(ChangeAction action) 
     { 
      if (isValid) 
       throw new ApplicationException("Rule violation prevents saving"); 
     } 
    } 

    public class RuleViolation 
    { 
     public string ErrorMessage { get; private set; } 
     public string PropertyName { get; private set; } 

     public RuleViolation (string errorMessage) 
     { 
      ErrorMessage = errorMessage; 
     } 

     public RuleViolation(string errorMessage, string propertyName) 
     { 
      ErrorMessage = errorMessage; 
      PropertyName = propertyName; 
     } 
    } 
} 

これはMVC 1.0 NerdDinner例を以下れます。私は間違って何をやっている

partial void OnValidate(ChangeAction action) 
    { 
     if (isValid) 
      throw new ApplicationException("Rule violation prevents saving"); 
    } 

部分メソッドの宣言をimplimentingが見つかりませdefinining宣言「を無効OnValidate(ChangeActionアクション)」:しかし、私はOnValidateメソッドの設計時のエラーを取得していないのですか?

+0

ここで間違っていることはまだよく分かりません。 – Craig

答えて

0

残りのユーザークラスを含む別のファイルが必要です。

このファイルでは、OnValidateという部分的なメソッドがあると宣言する必要があります。

public partial class user 
{ 
    partial void OnValidate(ChangeAction action); 
} 

いくつかの詳細: 部分メソッドは、どこかで指定された署名を持っている必要があります。署名が定義されると、オプションの実装を指定することができます。詳細についてはhttp://msdn.microsoft.com/en-us/library/wa80x488.aspxをお読みください。

+0

ありがとうございます。元のクラスファイルが生成され、部分クラスとしてマークされます。ただし、OnValidateメソッドはありません。ただし、クラス/メソッドは、Entity Frameworkモデルを作成するときに生成されます。私はそれを修正し、メソッドを追加しなければならないと思いますか?私の考えは、生成されていないコードがオリジナルの(生成された)クラスに触れられていない私のカスタム部分クラスファイルにあると考えました。次回はEFモデルを生成すると、変更が失われます。 – Craig

+0

問題は、私はEntity Frameworkの部分オブジェクトを使用していました。本はlinq to SQLオブジェクトを使用しています。 – Craig

+0

あなたのクラスに別の部分定義を作成したり、EFを生成したりするのを止めることはありません。この場合、生成されたファイルData.cs(主な実装)とData.Validation.csがあり、OnValidateメソッドのシグネチャを定義できます。 – WilliamB