bugfix> c# > 投稿

私はMVC ASPに慣れていないので、さらに学ぶために自分でアプリケーションを作成しています。もちろんEFとデータベースを使用しています。しかし、オプションの(null)外部キー(0対多の関係)を持つテーブルからすべての行をリストしようとすると、奇妙なことが起こります。テーブル "unit"の外部キーである列を持つクラス "Attribute"(テーブルに基づく)がありますが、データベース内のその列はオプション(null)です。クラスは次のように定義されます(縮小版):

public class Attribute
{
    public int id { get; set; }
    public string shortname { get; set; }
    public string longname { get; set; }
   [Display(Name = "DataType")]
   [Required]
    public int datatypeid { get; set; }
    [ForeignKey("datatypeid")]
    public virtual PIMObjects.Helpers.DataType DataType { get; set; }
    [Display(Name = "Uom")]
    public int uomid { get; set; }
    [ForeignKey("uomid")]
    public virtual Uom Uom { get; set; }
}

他の外部キーDataTypeは必須ですが、このテーブルの行をリストした唯一のFKインデックスビューはデータベースのすべての行を正しく表示していました。これがインデックスコントローラーでした。

  public ActionResult Index()
    {
        PIMContext context = new PIMContext();
        IQueryable<PIMObjects.Attribute> attributes = context.attributes.Include(a => a.DataType);
        return View(attributes.ToList());
    }

不要なUOM(ユニット)外部キーを追加し、これをコントローラーインデックスに追加した場合:

attributes = attributes.Include(a => a.Uom);

このフィールドuomidの値を持つ行のみを表示します。他の行は表示されません。 現在、データベースには、テーブルに2つの属性行があり、1つはuomを持ち、もう1つはuom列にnullを持っています。値を持つ行のみが表示されます。

ここで何が欠けていますか? ところで、これはindex.cshtmlでこのフィールドを表示する部分です

   <td>
        @if (item.Uom != null)
        { 
             @Html.DisplayFor(modelItem => item.Uom.unitname)
        }
    </td>