我是 Blazor、EF 和 .Net 核心的新手,我遇到了這個問題。我有這 2 個模型類,Mercancia和Clasificacion。Mercancia和Clasificacion之間存在一對多的關系,并且在Mercancia串列中顯示ClasificacionID我想顯示 Clasificacion 的名稱,但不起作用。這就是我宣告模型的方式。
public partial class Mercancia
{
public Mercancia()
{
AlmacenItems = new HashSet<AlmacenItem>();
RecepcionItems = new HashSet<RecepcionItem>();
ValeItems = new HashSet<ValeItem>();
}
public int Id { get; set; }
public string Nombre { get; set; } = null!;
public int ClasificacionId { get; set; }
public string Codigo { get; set; } = null!;
public string? Descripcion { get; set; }
public string Um { get; set; } = null!;
public virtual Clasificacion Clasificacion { get; set; } = null!;
}
public partial class Clasificacion
{
public Clasificacion()
{
Mercancia = new HashSet<Mercancia>();
}
public int Id { get; set; }
public string Nombre { get; set; } = null!;
public string? Detalle { get; set; }
public virtual ICollection<Mercancia> Mercancia { get; set; }
}
這是Mercancia的控制器
[Route("api/[controller]")]
[ApiController]
public class MercanciaController : Controller
{
private readonly IMercancias imercancias;
public IActionResult Index()
{
return View();
}
public MercanciaController(IMercancias imercancias)
{
this.imercancias = imercancias;
}
[HttpGet]
public async Task<ActionResult<List<Mercancia>>> Get()
{
return await Task.FromResult(imercancias.Lista());
}
[HttpPost]
public void Post(Mercancia mercancia)
{
imercancias.Adicionar(mercancia);
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
Mercancia u = imercancias.Obtener(id);
if (u != null)
{
return Ok(u);
}
return NotFound();
}
[HttpPut]
public void Put(Mercancia merca)
{
imercancias.Editar(merca);
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
imercancias.Eliminar(id);
return Ok();
}
}
服務
public interface IMercancias
{
public List<Mercancia> Lista();
public void Adicionar(Mercancia u);
public void Editar(Mercancia u);
public Mercancia Obtener(int id);
public void Eliminar(int id);
}
public class GestionMercancias : IMercancias
{
readonly RaicesDBContext context = new();
public GestionMercancias(RaicesDBContext context)
{
this.context = context;
}
public void Editar(Mercancia u)
{
try
{
context.Entry(u).State = EntityState.Modified;
context.SaveChanges();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
public void Eliminar(int id)
{
try
{
Mercancia? u = context.Mercancias.Find(id);
if (u != null)
{
context.Mercancias.Remove(u);
context.SaveChanges();
}
else
{
throw new ArgumentNullException();
}
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
public List<Mercancia> Lista()
{
try
{
return context.Mercancias.ToList();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
public Mercancia Obtener(int id)
{
try
{
Mercancia? u = context.Mercancias.Find(id);
if (u != null)
{
return u;
}
else
{
throw new ArgumentNullException();
}
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
public void Adicionar(Mercancia u)
{
try
{
context.Mercancias.Add(u);
context.SaveChanges();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
}
和視圖
@page "/mercancias"
@inject HttpClient client
@inject IJSRuntime js
<h3>Mercancías</h3>
<small>Adiciona mercancías.</small>
<div class="form-group">
<a class="btn btn-success" href="mercancias/create"><i class="oi oi-plus"></i> Nuevo</a>
</div>
<br>
@if (mercancias == null)
{
<text>Loading...</text>
}
else if (mercancias.Count == 0)
{
<text>No Records Found.</text>
}
else
{
<table class="table table-striped">
<thead>
<tr>
<th>Id</th>
<th>Mercancia</th>
<th>Clasificacion</th>
<th>Codigo</th>
<th>UM</th>
<th>Detalles</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (Mercancia merc in mercancias)
{
<tr>
<td>@merc.Id</td>
<td>@merc.Nombre</td>
<td>@merc.Clasificacion.Nombre</td> **HERE THE PROBLEM**
<td>@merc.Um</td>
<td>@merc.Descripcion</td>
<td>
<a class="btn btn-success" href="mercancias/editar/@merc.Id">Edit</a>
<button class="btn btn-danger" @onclick="@(() => Delete(merc.Id))">Delete</button>
</td>
</tr>
}
</tbody>
</table>
}
@code {
List<Mercancia> mercancias { get; set; }
protected override async Task OnInitializedAsync()
{
mercancias = await client.GetFromJsonAsync<List<Mercancia>>("api/Mercancia");
}
async Task Delete(int Id)
{
var merca = mercancias.First(x => x.Id == Id);
if (await js.InvokeAsync<bool>("confirm", $"Do you want to delete {merca.Nombre}'s ({merca.Id}) Record?"))
{
await client.DeleteAsync($"api/Mercancia/{Id}");
await OnInitializedAsync();
}
}
}
uj5u.com熱心網友回復:
首先,我的模型中的回圈關系
public partial class Mercancia
{
public Mercancia()
{
AlmacenItems = new HashSet<AlmacenItem>();
RecepcionItems = new HashSet<RecepcionItem>();
ValeItems = new HashSet<ValeItem>();
}
public int Id { get; set; }
public string Nombre { get; set; } = null!;
public int ClasificacionId { get; set; }
public string Codigo { get; set; } = null!;
public string? Descripcion { get; set; }
public string Um { get; set; } = null!;
public virtual Clasificacion Clasificacion { get; set; } = null!;
}
public partial class Clasificacion
{
public Clasificacion()
{
//Mercancia = new HashSet<Mercancia>();
}
public int Id { get; set; }
public string Nombre { get; set; } = null!;
public string? Detalle { get; set; }
//public virtual ICollection<Mercancia> Mercancia { get; set; }
}
然后,我必須在控制器中“包含”該關系。
public List<Mercancia> Lista()
{
try
{
return context.Mercancias.Include(m => m.Clasificacion).ToList();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/507001.html
