Я немного растерялся. Итак, у меня есть 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>