Používám
- Microsoft Visual Studio Společenství 2022 (64-bit) - Preview Verze 17.1.0 Náhled 1.1
- .NET Framework Verze 4.8.04084
- ASP.NET Core 5, Břitva Stránky (Není MVC)
- Entity Framework 5
Dostanu "Neplatná Operace" výjimkou v následujícím kódu, a nejsem si jistý, proč.
V kostce, mám dva modely:
- Zkratka
- AcronymOld
Acronym
má mnoho vztahů s AcronymOld
.
Akronym:
public class Acronym
{
[Key]
public int Id { get; set; }
[Required]
[Display(Name = "Acronym")]
[StringLength(50, ErrorMessage = "Acronym cannot be longer than 50 characters.")]
public string Abbreviation { get; set; }
[Required]
[Display(Name = "Description")]
[StringLength(100, ErrorMessage = "Description cannot be longer than 100 characters.")]
public string Description { get; set; }
[StringLength(250, ErrorMessage = "URL cannot be longer than 250 characters.")]
public string URL { get; set; }
public List<AcronymOld> AcronymsOld { get; set; }
}
AcronymOld:
public class AcronymOld
{
[Key]
public int Id { get; set; }
[Required]
[Display(Name = "Previous Acronym")]
[StringLength(50, ErrorMessage = "Previous Acronym cannot be longer than 50 characters.")]
public string Abbreviation { get; set; }
[Required]
[Display(Name = "Previous Acronym Description")]
[StringLength(100, ErrorMessage = "Previous Acronym Description cannot be longer than 100 characters.")]
public string Description { get; set; }
[Display(Name = "Last Used")]
public DateTime LastUsed { get; set; }
//Acronym Can Have One or More AcronymOld
[ForeignKey("AcronymId")]
public int AcronymId { get; set; }
public Acronym Acronym { get; set; }
}
Kód:
public class IndexModel : PageModel
{
private readonly ApplicationDbContext _context;
public IndexModel(ApplicationDbContext context)
{
_context = context;
}
public bool isDirty = false;
public List<SelectListItem> Acronyms { get; set; }
public IList<AcronymOld> AcronymOld { get; set; }
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
[BindProperty(SupportsGet = true)]
public string SelectedAcronym { get; set; }
public async Task OnGetAsync()
{
// Populate Acronym SelectList
Acronyms = _context.Acronym.Select(a =>
new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Abbreviation,
}).ToList();
var acronymsOld = from m in _context.AcronymOld
select m;
if (!string.IsNullOrEmpty(SelectedAcronym))
{
acronymsOld = acronymsOld.Where(m => m.Id == Int32.Parse(SelectedAcronym));
isDirty = true;
}
if (!string.IsNullOrEmpty(SearchString))
{
if (isDirty == true)
{
// AcronymOld selected. Do not GroupBy
acronymsOld = acronymsOld.Where(m => m.Abbreviation.Contains(SearchString));
}
else
{
//AcronymOld not selected. Use GroupBy
acronymsOld = acronymsOld.Where(m => m.Abbreviation.Contains(SearchString));
}
}
AcronymOld = await acronymsOld.Include(m => m.AcronymId)
.OrderBy(m => m.Abbreviation)
.AsNoTracking()
.ToListAsync();
}
}
Jsem stále chybu tady na tomto řádku:
AcronymOld = await acronymsOld.Include(m => m.AcronymId)
.OrderBy(m => m.Abbreviation)
.AsNoTracking()
.ToListAsync();
Podrobná chyba:
InvalidOperationException: výraz 'm.AcronymId' je neplatný uvnitř "Zahrnují" provoz, protože to nepředstavuje přístup k vlastnosti: t => t.MyProperty'. Cíl navigace prohlásil na odvozené typy, použití odlitků (t => ((Odvozené)t).MyProperty'), nebo "jako" operátor ('t = > t (Odvozené).MyProperty'). Kolekce navigační přístup může být filtrován pomocí skládání Kde, řadit podle(Sestupně), ThenBy(Sestupně)
AcronymOld = čekají acronymsOld.Zahrnují(m => m.AcronymId)