2011-01-07 7 views
0

私は、ドメイン駆動型設計とエンティティフレームワークのモデルファースト機能について私が読んできたものを合成しようとしています。私は既存のデータベースを持っていますが、ドメインモデルを作成している間は無視しました。私はCompanyクラスとPersonクラスで終わった。モデルでは、私は2つのクラスの間の関係の必要はありません。しかし、私は会社の人々のリストを取得する方法が必要です。 PersonRepositoryにGetPeople(int companyId)メソッドを持たせることにしたので、このリストを取得するためにCompanyインスタンスを持つ必要はありませんでした。エンティティフレームワークのドメインモデルにプロパティを追加する必要がありますか?

会社クラス
のint Idを
列名

人クラス
のint Idを
文字列の姓
文字列とLastName

PersonRepository:クラスは次のようになります IEnumerable <Person> GetPeople(int companyId){? }

データベース/ EFパートになりました。データベースには基本的な外部キー関係があります。したがって、PersonsテーブルにもCompanyIdフィールドがある点を除いて、テーブルは上記のクラスと似ています。

ドメインモデルでこのデータベース関係の参照を追加していないため、EFはクラスが関連しているとは考えていないため、GetPeopleメソッドを記述すると、これはできません。

public IEnumerable<Person> GetPeople(int companyId) { 
    return MyDbContext.Persons.Where(c => c.CompanyId == companyId); 
} 

...ドメインモデルのPersonクラスにCompanyIdプロパティがないためです。私はいつもそのプロパティを追加することができますが、パーシスタンスメカニズムは現在、ドメインモデルに影響を与えています。これは、モデルファーストのアプローチで避けたいものです。

ドメインモデルに誤ってそのプロパティを追加することはできますか、それとも単にPOCOなので不適切な侵入ではありませんか?あなたが達成するために必要なものに応じて

答えて

0

...

あなたが一緒に会社IDと個人IDを結びつける従業員テーブル/オブジェクトを追加することができます。

これで、特定の会社の従業員を得ることができます。または特定の人が働く会社を得ることができます。

+0

私はすでにPersonテーブルにCompanyIdを持っています(しかし、クラスではありません)ので、それらはデータベースに結びついています。 PersonクラスにはCompanyIdがないので、EFはそれについて知らないだけです。 – coulterps

+0

あなたの声明では、CompanyIdはPersonのプロパティなので、Personオブジェクトに反映される必要があります。両方のIDを結合し、CompanyEmployeesまたはPersonWorksForのルックアップを管理するEmployeesオブジェクトを追加できます。 –

関連する問題