2012-04-02 8 views
1

だから私持っている、そのような姓などのID、名前、などの基本的なフィールドを持っている連絡先と呼ばれるEF4クラス、はEF4クラスからオブジェクトを継承したばかり

今、私は基本的にSelectedUserとLoggedUserと呼ばれる別の2クラスを作成したいですContactクラスから継承していますが、追加のメソッドがあります。

だから、次のように私はSelectedContactというクラスを作成しました: -

public partial class SelectedContact : Contact 
{ 

    methods.......... 
} 

私は例えば、私はSelectedContactを盗んしたい、しかし問題を抱えています。だから、基本的に私がやっている何

Contact contact = db.Contacts.FirstOrDefault(u => u.id_contact == contactId); 
SelectedContact selContact = (SelectedContact)contact; 

ですこれは、私がSelectedContactへの接触からキャストすることができないことを私に言って、動作しません。

私も

Contact contact = db.Contacts.FirstOrDefault(u => u.id_contact == contactId); 
SelectedContact selContact = contact as SelectedContact; 

を試してみましたが、これはnullをselContactを返します。

私はすなわち、フィールド一つ一つを動かすことができることを知っている: -

SelectedContact selContact = new SelectedContact(); 
selContact.id_contact = contact.id_contact; 

私はそれを行うには良い方法があることを確信していますが。

ご協力いただきありがとうございます。

ご協力いただきありがとうございます。

答えて

1

SelectedContactにはSelectedContactではないため、データベースから取得したインスタンスをキャストできません。 Contactのみであり、新しいインスタンスを作成せずにキャストすることはできません(キャスト演算子をオーバーライドする必要があります)。

エンティティモデルに派生クラスが含まれていないため、データベースをクエリするたびにインスタンスがContactにしかならないためです。あなたのシナリオをサポートするためには、派生クラスもマップする必要がありますが、複数の欠点があります。たとえば、連絡先の種類を変更することはできません。

+0

返信いただきありがとうございますLadislavので、基本的に手動で値を移動する必要がありますか?私が現時点でやっているように – Johann

+0

はい、継承はあなたの問題の良い設計アプローチではありません。連絡先が選択されているかどうかの決定は、継承としてではなくプロパティとしてモデル化する必要があります。 –

+0

あなたの助けに感謝します。Ladislav – Johann

関連する問題