=回答としてコメントを投稿する=
EFオブジェクトは、数バージョン前からのPOCOです(どちらかはわかりません)。「EntityObject」が必要な場合は、何らかのアダプターを使用する必要があります(アプリケーションの移行を容易にするアダプターがあると思いますが、新しいプロジェクトの一部として使用することはお勧めしません)。
モデルクラスにEF関連のメソッドがある場合、そうすることは本当に悪いことです。しかし、EF5はすべきではありません。4.1以降、まさにその理由でEntityObjectを拡張する代わりにプロキシを使用していると思います。これは、モデルとして使用することをお勧めします。
.ttファイルと生成された.csファイルを確認してください。それらはプレーンなPOCOです。インターフェイスも基本クラスもありません。エンティティフレームワークからオブジェクトを取得し、オブジェクトのタイプを確認すると、のようなものが見つかりますSystem.Data.Entity.DynamicProxies.Employee_5E43C6C196[...]
。これは、プロキシによって生成されたクラスです。ただし、まったく同じことを実行しても、(dbContext.Configuration.ProxyCreationEnabled = false;
)の前にデータベースコンテキスト構成を変更すると、優れたEmployeeエンティティを獲得できます。
したがって、元の質問に答えるには、EF POCOをモデルとして使用することは完全に受け入れられます/良い習慣ですが、それらを非永続オブジェクトとして使用するようにしてください。
追加情報
DDDの概念と、リポジトリなどのDDD準拠のパターンの実装、または使用しやすいと思われるものを検討する必要があります。
これらのエンティティを、永続的または非永続的に、ビューで直接使用しないでください。
AutoMapperについて読んで、生活を楽にする必要があります(リポジトリまたはスタンドアロンとうまく調和します)。これにより、ProxyEmployee->Employee->ViewModelおよびその逆からの転送が容易になります。
EFエンティティの恐ろしい使用例:
return View(dbContext.employees.First());
EFエンティティの悪い#1使用法の例:
Employee e = dbContext.employees.First();
return View(new Employee { name = e.name, [...] });
EFエンティティの悪い#2使用法の例:
Employee e = dbContext.employees.First();
return View(new EmployeeViewModel{ employee = e });
EFエンティティのok使用法の例:
Employee dbEmploye = dbContext.employees.First();
Employee e = new Employee { name = dbEmploye.name, [...] };
return View(new EmployeeViewModel { employee = e });
EFエンティティの適切な使用例:
Employee e = dbContext.employees.First();
EmployeeViewModel evm = Mapper.Map<Employee, EmployeeViewModel>(e);
return View(evm);
EFエンティティのすばらしい使用例:
Employee e = employeRepository.GetFirstEmployee();
EmployeeViewModel evm = Mapper.Map<Employee, EmployeeViewModel>(e);
return View(evm);
チャックノリスはそれをどのように行うか:
return View(EmployeeViewModel.Build(employeRepository.GetFirstEmployee()));