2010-11-19 11 views
1

HI、C#DALクラスとビジネスレイヤクラス

これが可能かどうかを教えてください。

public class Person 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

クラスの呼び出しを読み込むには(そう、人と、それは人口であるところがでていないコードの人口で、このようなエンティティと呼ばれるアセンブリである人はDataAccessLayerと呼ばれる別のアセンブリで行われていると言います同じアセンブリ)

//以下のコードはdatareaderなどから読み込んでいますが、説明を簡単にするためにこれを行っています。

Person p=new Person(); 
p.Name="tom"; 
p.id = 10; 

この人物クラスは、別のシステムから人にアクセスできるようになりました。私が望むのは、他のシステムがIDを変更できないようにすることです。それを読むことはできますが、書くことはできません。これを可能にするために別のクラスなどを作成する必要があり、このクラスのみを他のシステム(つまりビジネスオブジェクト)(つまりORM)に公開する必要がありますか?

私は多くの人がIDだけを読んで言うと言うと思います。すなわち

public int ID { get; } 

が、私はこれを行う場合、私のDataAccessLayerに私はそれが読み取り専用であるとしてIDを設定することはできませんので、私は、上記のようなコードからIDを読み込むことができません。

おかげ ニール

+0

readonlyプロパティを保持せずに、単にコンストラクタを介してバッキング変数の値を設定するのはなぜですか? – Pierreten

答えて

4

あなたは別のDLL(DataAccessLayer)を参照して使用できるようにすることができますエンティティのDLLのためのフラグを設定し、その後、あなたにIDを渡すことができるオブジェクトのためのinternalコンストラクタを作成することができますこのDLL内の内部呼び出し。 (InternalsVisibleTo属性)になりますあなたとあなたのidプロパティのエンティティのIDを割り当てますORMツールに向けて

+0

はい、これは私のソリューションより優れたカプセル化を持っています(コンテナのアセンブリの外には表示されません) – Pierreten

+0

素敵な解決策 – Somedeveloper

0

ルック:

public class MyEntity 
{ 
    public virtual int ID { get; protected set; } 

    // other properties 
} 

あなたがこの方法を選択した場合は、プロパティを割り当てることを心配する必要はありません。タイプの鋳造。

関連する問題