2011-09-10 6 views
1

私はMassiveを使用しており、メンバーテーブルを持っています。私のメンバークラスでは、私は電子メールでメンバーを検索するfindメソッドを持っています。動的に戻るときにRuntimeBinderExceptionが表示されるのはなぜですか?

public class Members : DynamicModel 
    { 
     public Members(): base("TSConnection", "Members", "Id"){} 

     public dynamic Find(string email) 
     { 
      dynamic result = new ExpandoObject(); 
      result.Success = false; 
      try 
      { 
       result.Member = this.Single(where: "[email protected]", args: email); 
       result.Success = result.Member != null; 
      } 
      catch (Exception ex) 
      { 
       result.Message = ex.Message; 
      } 
      return result; 
     } 
} 

期待して別々のユニットテストテストでresult.Member.Idは、それがデータが取り込まれます表示されていること、これがすべてを返します。

別のクラスでは、Addresses。 RuntimeBinderExceptionを返してvar member = members.Find(email);これを読み取ってタブ付きの行で

public class Addresses : DynamicModel 
    { 
     public Addresses() : base("TS", "Addresses", "Id") { } 

     public dynamic Create(string email, string type, string address1, string address2, string city, string state, int countryId, string postcode) 
     { 
      var members = new Members(); 
      dynamic result = new ExpandoObject(); 
      result.Success = false; 
      //var member = members.Find(email); 

      result.Member = members.Single(where: "[email protected]", args: email); 
      dynamic address = new ExpandoObject(); 

      if (result.Member != null) 
      { 
       address.Id = this.Insert(new { 
        MemberId = result.Member.Id, 
        AddressTypeId = (int)AddressType.Account, 
        Address1 = address1, 
        Address2 = address2, 
        City = city, 
        State = state, 
        Country = countryId, 
        Postcode = postcode 
       }); 
       result.Address = address.Id != 0 ? address : null; 
       result.Success = address.Id != 0; 
      } 
      return result; 
     } 
} 

:私は、特定のメンバーのアドレスを挿入するときに使用するユーザが存在することを確認するために、このメソッドを使用するとMember.Idを取得しようmember.Member.Idにアクセスしようとすると私はコードにステップし、Findメソッドは正しいデータを返すが、変数メンバーに渡されていない。奇妙なことに、コードを使用して、下の行でユーザーを取得すると、次のようになります。

result.Member = members.Single(where: "[email protected]", args: email); 

しかし、物事をDRYに保つのは本当に良いことではありません。何が起きているのですか?AddressesクラスのメンバークラスからFindメソッドを使用する方法はありますか?

ロイドあなたはExpandoObjectあるFind、から、resultを戻ってきているためです

答えて

2

MemberAddressesにアクセスするには、コードを次のように変更する必要があります。

var members = new Members(); 
var result = members.Find(email); 
var member = result.Member; 
関連する問題