Ключевые внешние проблемы - PullRequest
0 голосов
/ 05 января 2020

Я немного растерялся. Итак, у меня есть 2 модели проекта и работы. Проект может иметь несколько работ. Например, вы делаете что-то для этого конкретного c проекта, я назвал его рабочим -> Я знаю, что это не лучшее название.

Теперь, в моем последнем проекте, где у меня есть проводник mov ie у вас есть 1 mov ie, который имеет несколько жанров. В моей базе данных есть таблица фильмов, таблица жанров, а также таблица внешних ключей, в которой хранится фильм с genreid.

В этом проекте, очевидно, у меня нет этих таблиц. Это потому, что я сделал что-то не так или это из-за изменений в ядре структуры сущностей?

Итак, для этого проекта я использую fluenapi для установки hasone с несколькими, и я вижу, что моя рабочая модель / таблица имеет 2 внешних ключа 1 для проекта и 1 для сотрудника. Мое представление индекса работает отлично, я вижу строку с моим projectId, поэтому он работает, хотя пользователи не хотят видеть проект gui, они хотят видеть имя проекта. Так что, если я изменю work.projectid на work.project.name, он будет пустым, и это то, где я запутался.

вопросы:

Почему он пуст? И что я хочу знать, как я могу получить имя? и, наконец, почему этот проект, например, не создает таблицы freign key, как я говорил ранее?

С уважением.

модели:

public class Work
    {

        public int Id { get; set; }

        [Required]
        [StringLength(512, ErrorMessage = "Description cannot exceed 512 characters!")]
        public string Description { get; set; }        

        [Required]
        [Display(Name = "Working hours")]
        public double WorkingHours { get; set; }

        [Required]
        [Display(Name = "Employee")]
        public Guid EmployeeId { get; set; }

        public Employee Employee { get; set; }

        [Required]
        [Display(Name = "Project")]
        public Guid ProjectId { get; set; }

        public Projects Project { get; set; }

        [Required]
        public DateTime dateAdded { get; set; }


    }

dbcontext:

public class ApplicationDbContext : DbContext
    {

        public ApplicationDbContext(DbContextOptions options)
            :base(options)
        {

        }

        public DbSet<Employee> employees { get; set; }
        public DbSet<Projects> projects { get; set; }
        public DbSet<Work> work { get; set; }
        public DbSet<Interventions> interventions { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Work>()
                .HasOne(w => w.Project)
                .WithMany(p => p.work)
                .HasForeignKey(w => w.ProjectId)
                .HasConstraintName("FKWork_Project");     

            modelBuilder.Entity<Interventions>()
                .HasOne(w => w.Project)
                .WithMany(p => p.interventions)
                .HasForeignKey(w => w.ProjectId)
                .HasConstraintName("FKInterventions_Project");
        }
    }

мой код для просмотра индекса:

 public async Task<IActionResult> Index(int page = 1)
        {
            var query = _context.work.AsNoTracking().OrderBy(w => w.Id);  


            var model = await PagingList.CreateAsync(query, 5, page);          


            return View(model);
        }

my код индексного представления:

@model ReflectionIT.Mvc.Paging.PagingList<Work>
@addTagHelper *,ReflectionIT.MVC.Paging
@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>

<p>
    <a asp-action="Create">New work</a>
</p>

<table class="table">
    <thead>
        <tr>
            <th>Date</th>
            <th>Project</th>
            <th>Description</th>
            <th>Working Hours</th>
            <th>Employee</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>

                <td>
                    @Html.DisplayFor(modelItem => item.dateAdded)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ProjectId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Description)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.WorkingHours)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.EmployeeId)
                </td>
                <td>
                    <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>
<nav aria-label="Projects example">
    <vc:pager paging-list="@Model" />
</nav>

ssms

...