LoginSignup
0
0

ASP.NET Core MVC トランのテーブルから複数同じマスタを参照(JOIN)するModel

Posted at

例えば「売上」テーブルがあって「担当者ID」「入力者ID」とそれぞれ「従業員」マスタテーブルを参照する項目があった場合、確か(うろ覚えだが)ASP.NET MVCでシステムを構築していた際にModelの作成がうまくできず(結合できない?)、仕方がないからSQLServer側に従業員マスタから「入力者従業員」とView(MVCだとややこしいがMVCの画面のViewではなくデータベース)を作ってASP.NET MVCではModelをそれぞれ「担当者」「入力者」とそれぞれ作成、売上テーブルからもそれぞれ参照という無駄?な作りにした。

今回、ASP.Core MVCに移行することになって同様に作成(というかコピー)していたところ、View(MVCだとややこしいがMVCの画面のViewではなくデータベース)で作成したModelをDBContextからLINQ?で呼び出した際に以下のエラーになってしまった。
Unable to determine the relationship represented by navigation

半日くらい調べてようやく解決。

以下のようModelを設定する。(データベースの「入力者従業員」は結果不要になった)

「売上」

[Column("employee_id")]
[DisplayName("担当者")]
public int? EmployeeId { get; set; }

[Required(ErrorMessage = "{0}は必須入力です。")]
[Column("enter_employee_id")]
[DisplayName("入力者")]
public int EnterEmployeeId { get; set; }
・・・
public virtual Employee? Employee { get; set; }
public virtual Employee? EnterEmployee { get; set; }

「従業員」(前は「担当者従業員」と「入力者従業員」の2つ作成していた)
public int Id { get; set; }
public string Code { get; set; } = null!;
public string Name { get; set; } = null!;
・・・
[InverseProperty("Employee")]
public virtual ICollection? EmployeeSales { get; set; }
[InverseProperty("EnterEmployee")]
public virtual ICollection? EnterEmployeeSales { get; set; }

ポイントはInversePropertyですかね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0