我有一个带有另一个表的外键的模型。在这种情况下,减免对象涉及到办公室对象MVC Core:显示基于主键的另一个属性
public class Waiver
{
public int WaiverID { get; set; }
[Required(ErrorMessage = "Please select an Office")]
[Range(1, int.MaxValue, ErrorMessage = "Please select an Office")]
public int OfficeID { get; set; }
//...other properties
}
我有一个由OfficeID过滤搜索结果:
@model IEnumerable<Waiver>
@foreach (var item in Model)
{
<tr>
<td class="text-right">@item.WaiverID</td>
<td class="text-right">@item.OfficeID></td>
@* other display columns *@
:
IEnumerable<Waiver> waiverList = repository.Waivers
.Where(wl => waiverNum == 0 || wl.WaiverID == waiverNum)
.Where(wl => officeId == 0 || wl.OfficeID == officeId)
//...other search criteria
这是通过显示在我看来,
尽管传递给View的Waiver对象具有OfficeID属性,但我想在Office模型中显示Name属性,因为它对用户更有用。我怎样才能做到这一点?
我的EF库被设置为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Waiver.Models
//This class implements the IWaiverRepository and gets its data using Entity Framework Core
{
public class EFWaiverRepository : IWaiverRepository
{
private ApplicationDbContext context;
public EFWaiverRepository(ApplicationDbContext ctx)
{
context = ctx;
}
public IEnumerable<Waiver> Waivers => context.Waivers;
public IEnumerable<Office> Offices => context.Offices;
//*****Waiver Methods*****
public void SaveWaiver(Waiver waiver)
{
//if the waiver number is 0, create a new waiver
if (waiver.WaiverID == 0)
{
context.Waivers.Add(waiver);
}
//if there wavier number exists, save the changes to the database
else {
Waiver dbEntry = context.Waivers.FirstOrDefault(w => w.WaiverID == waiver.WaiverID);
if (dbEntry != null)
{
dbEntry.Requestor = waiver.Requestor;
dbEntry.RequestorEmail = waiver.RequestorEmail;
dbEntry.OfficeID = waiver.OfficeID;
dbEntry.RequestDate = waiver.RequestDate;
dbEntry.System = waiver.System;
dbEntry.Source = waiver.Source;
dbEntry.Requirement = waiver.Requirement;
dbEntry.MitigationPlan = waiver.MitigationPlan;
dbEntry.FinalAssessment = waiver.FinalAssessment;
dbEntry.Status = waiver.Status;
//get the signatures
dbEntry.PmSignature = waiver.PmSignature;
dbEntry.PmSignDate = waiver.PmSignDate;
}
}
context.SaveChanges();
}
public Waiver DeleteWaiver(int waiverID)
{
Waiver dbEntry = context.Waivers
.FirstOrDefault(w => w.WaiverID == waiverID);
if (dbEntry != null)
{
context.Waivers.Remove(dbEntry);
context.SaveChanges();
}
return dbEntry;
}
//*****Office Methods*****
public void SaveOffice(Office office)
{
//if the ID=0, its a new entry. Add to db
if (office.OfficeID == 0)
{
context.Offices.Add(office);
} else
{
Office dbEntry = context.Offices.FirstOrDefault(o => o.OfficeID == office.OfficeID);
if (dbEntry != null)
{
dbEntry.Name = office.Name;
dbEntry.SiteID = office.SiteID;
}
}
context.SaveChanges();
}
public Office DeleteOffice(int officeID)
{
Office dbEntry = context.Offices
.FirstOrDefault(o => o.OfficeID == officeID);
if (dbEntry != null)
{
context.Offices.Remove(dbEntry);
context.SaveChanges();
}
return dbEntry;
}
其中EFRepository实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Waiver.Models
{
public interface IWaiverRepository
{
IEnumerable<Waiver> Waivers { get; }
IEnumerable<Office> Offices { get; }
IEnumerable<Site> Sites { get; }
void SaveWaiver(Waiver waiver);
Waiver DeleteWaiver(int waiverID);
void SaveOffice(Office office);
Office DeleteOffice(int officeID);
}
}
你在使用实体框架核心吗?它是什么版本? – DSR