ASP MVC Включить в представление класс внешнего ключа, который не является обязательным - PullRequest
0 голосов
/ 25 мая 2018

Я новичок в MVC ASP, поэтому, чтобы узнать больше, я подаю заявку самостоятельно.Он работает с EF и базой данных.Странная вещь, однако, происходит, когда я пытаюсь перечислить все строки из таблицы, которая имеет необязательный (нулевой) внешний ключ (отношение ноль-ко-многим).Существует класс «Атрибут» (на основе таблицы), в котором есть столбец, который является внешним ключом таблицы «единица измерения», но этот столбец в базе данных является необязательным (нулевым).Класс определяется следующим образом (сокращенная версия):

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);

он просто показывает строки, которые имеют значение дляэто поле уомид.Другие строки не показаны.На данный момент в базе данных есть две строки атрибутов в таблице, одна из которых имеет значение uom, а другая - пустую в столбце uom.Он показывает только строку, которая имеет значение.

Что мне здесь не хватает?Кстати, эта часть должна показывать это поле в index.cshtml

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

1 Ответ

0 голосов
/ 25 мая 2018

Я не могу попробовать это сам сейчас, но я бы сказал, что вам нужно изменить тип uomid с int на nullable int ("int?").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...