エンティティフレームワークを初めて使用しました。私はMVCで、Ninjectを使ってマルチティアアプリケーションを作成しました。
データベースに3つのテーブルがあります。表A、表Bおよび表Cを参照してください。エンティティフレームワークエンティティが関連エンティティのプロパティを表示しない
Table A has a foreign key relating it to Table B
Table B has a foreign key relating it to Table C
Table A => Table B => Table C
マイアプリケーションにはMVCコントローラから呼び出される「サービス」があります。
このサービスは、EF DataContextからのエンティティの作成、読み取り、更新、または削除を担当するすべてのエンティティ(つまりTableAService、TableBService)のリポジトリとして機能し、これらのエンティティでビジネスロジックを実行する可能性があります。
私のMVCコントローラ内には、適切なサービスへの参照があります。例えば:、
private EFDataContext _dataContext;
public TableAService(EFDataContext dataContext)
{
_dataContext = dataContext;
}
public TableA GetById(int tableAId)
{
_dataContext.TableA.SingleOrDefault(ta => ta.TableAId == tableAId);
}
私は例のサービスがしっかりデータソースに結合されることを理解、私の実際の実装は若干異なりますが、考え方は同じです:
private TableAService _tableAService;
public TableAController(EFDataContext dataContext)
{
_tableAService = new TableAService(dataContext);
}
public ActionResult Index()
{
return View();
}
TableAServiceは、次のようになります私はエンティティを返すことを望むdataContextを持つサービスを持っています。質問: - 私がTableAServiceのGetByIdメソッドに入っているとき、SingleOrDefaultは私にTableBナビゲーションプロパティを与え、TableCナビゲーションプロパティを含むすべてのTableBのプロパティにアクセスできます。
しかし、TableAをコントローラに戻すと、TableBのプロパティにアクセスできなくなります。
private ObjectSet<TableA> _objSet = _dataContext.CreateObjectSet<TableA>();
と
return _objSet.SingleOrDefault(ta => ta.TableAId == tableAId);
これはからTableBの上TableCのナビゲーションプロパティにアクセスすることができることに任意の違いを確認していないようです。私も試したサービス内で
TableAエンティティ。
ご協力いただければ幸いです!あなたは、同様に使用することをTableCのレコードを取得したい場合は
public TableA GetById(int tableAId)
{
return _dataContext.TableA.Include("TableB").SingleOrDefault(ta => ta.TableAId == tableAId);
}
:
乾杯、
ジェームズ