プロジェクト全体でドロップダウンリストに入力するIDとラベルで構成されるテーブルがあります。Entity Frameworkコアを使用してモデル間でドロップダウン値テーブルを使用および共有する方法
public class Office
{
public int ID { get; set; }
public string Name { get; set; }
public string StreetAddress { get; set; }
public int CityID { get; set; }
}
私は私のコントローラの都市の私のリストを取得する方法を知っている:都市のリストを参照するために、私は私のオフィスのモデルをしたいと思います
public class Cities
{
public int CityID { get; set; }
public string CityName { get; set; }
}
:この例では、私は都市のリストを使用しています
public async Task<IActionResult> Edit(int? id)
{
var office = await _context.Offices.SingleOrDefaultAsync(m => m.OfficeID == id);
var getCities = _context.Cities.ToList();
ViewBag.citylist = new SelectList(getCities, "CityID", "CityName");
return View(office);
}
ViewBagを使用すると、リストを作成するためのエレガントで適切な方法とは思えませんが、機能します。
私がオフィスのレコードを作成または更新すると、更新中のレコードに市のIDが正しく格納されます。しかし、私はオフィスの記録を見ると、私は市のIDにしかアクセスできません。 市のIDを使って市の名前にアクセスして表示する方法がわかりません。オフィスの記録に保存されているcityIDを使用してCitiesテーブルから都市名にアクセスするにはどうすればよいですか?
このようなものを使用して、必要なすべての情報にアクセスすることが好ましいと思われる:
var offices = await _context.Offices
--> .PseudoCode.GetTheCityNameFromTheID() <---
.ToListAsync();
しかし、私が作成し、多対1の関係のこの種を(使用する方法がわかりませんか? )を使用して、Entity Frameworkコアを使用します。私は、各オフィスの記録に一致する都市価値が1つしかないことを知っています。
また、同じ都市リストを使用して、ユーザープロファイルなど他のモデルの都市情報を入力する場合はどうすればよいですか?
プレコアバージョンのEFの例がありますが、構文が新しいコア構文と相関していないようです。
[ForeignKey("bar")]
と[InverseProperty("foo")]
などのデータアノテーションを使用しようとしましたが、これが正しいアプローチであるとは確信していません。
[ViewBagが選択リストの内容を渡す最善の方法であるかどうかの答えは、[ASP。net form documentation](https://docs.asp.net/en/latest/mvc/views/working-with-forms.html) "Select Tag HelperでViewBagまたはViewDataを使用することはお勧めしません。 MVCメタデータを提供する際にはより堅牢で、一般的には問題は少ない」 –