2009-08-31 8 views
2

私が構築された右の関係を持つテーブル次があるとします。は、エンティティクラスのコレクションを取得できません

public IQueryable<Employee> GetEmployee() 
{   
var Employee = this.Context.Employee.Include("EmployeeAddress").Include("Address"); 
return Employee; 
} 
Employee(empID, ...) 
Address(AddresID, ...) 
EmployeeAddress(EmpID, AddressID, ...) 

は、次にように、.NET RIA ServicesでGETEMPLOYEE用に生成されたコードを変更します

アトリビュート[Include]がEmployeeAddressのEmployeeとAddressのEmployeeAddressに追加されました。

は、次のコードでのSilverlightクライアント側のコードを実行している場合:私は何も持っていない

EntityQuery<Employee> query = from e in ctx.GetEmployeeQuery() 
           select e; 

。 GetEmployeeからインクルードを削除した場合:

public IQueryable<Employee> GetEmployee() 
{   
var Employee = this.Context.Employee; 
return Employee; 
} 

これは問題なく動作します。従業員にメンバーをルックアップするために

、性別

public IQueryable<Employee> GetEmployee() 
{   
var Employee = this.Context.Employee.Include("GenderLookup"); 
return Employee; 
} 

のようにそれは正常に動作します。ここでEmployee.Genderは単一のオブジェクトです。 Employee.EmployeeAddressはコレクションであり、単一のオブジェクトではないからですか?

理由を特定できません。それを解決するには?

答えて

0

"buddy"メタデータクラスのコレクションを表すプロパティでIncludeAttributeを使用する必要があります。ほとんどのRIAサービスの例はこれを実証しています。

これは遅延ロードではなく、積極的ロードです。私は、分散サーバーからの遅延ロードは一般的には良い考えではないので、それがあなたが意味するものだと思います。

+0

ありがとうございました。すべてのバディのメタデータに[Include]があります。もう一度試してみる。 – KentZhou

+0

まだ動作しません。 – KentZhou

0

RIAサービスを使用してサーバーからクライアントにデータを取得していますか?もしそうなら、RIA Servicesがその関係を認識するように、メタデータと[Association]属性を使用する必要があります。

[MetadataType(typeof(EmployeeMetadata))] 
public partial class Employee 
{ 
    public int EmployeeId {get; set; } 
    public EmployeeAddress Address {get; set; } 
} 

public partial class EmployeeAddress 
{ 
    public int EmployeeId {get; set; } 
} 

public class EmployeeMetaData 
{ 
    [Include] 
    [Association("EmployeeAddress", "EmployeeId", "EmployeeId")] 
    public EmployeeAddress Address {get; set;} 
} 

上記の例では、あなたのEmployeeクラスとあなたのアドレスクラスの両方がRIA Servicesの関連付けを作成するために使用できる「社員」性質を持っていることを前提としています。

詳しい情報

0

私はあなたがGETEMPLOYEE()メソッドを編集cannontことをかなり確信しています。 GetEmployeeAddress()という新しいメソッドを作成する必要があります。GetEmployeeAddress()

public IQueryable<Employee> GetEmployeeAddress(string address) 
{ 
    var Employee = this.Context.Employee.Where((x) => x.ID = address_ID) 
} 

このようなものです。 Bradもそうだけど、モデルビューアやDB自体で関連付けをすることをお勧めします。

関連する問題