I have this method, below, for getting one single entity:
public async Task<EditNurseHomeDto> GetHomeForEdit(NullableIdDto input)
{
var nurseHomeEdit = (await _homeRepository.GetAsync((int)input.Id));
var nh = nurseHomeEdit.MapTo<EditNurseHomeDto>();
return nh;
}
I have used this exact same method for another entity. In that other entity when the above method executes, it brings the data for the related entity (notes). However in the above method it is not bringing the related entity (Notes) back. The DTOs are structured virtually the same for both entities, yet it does not work in the above method?
11 Answer(s)
-
0
Hi,
Can you share EditNurseHomeDto class ?
Thanks.
-
0
Please ignore this post.
My home record had a null value in the NoteID column and that is why note entity was not loading. :shock:
-
0
Thanks,
It will be hard to find this for us :).
-
0
I am moving my MVC5 template app to .Net Core 1.1 MVC template. So I am porting over all my working code from the prior solution to the new .Net core solution. I have converted just 2 entities so far into the new solution. The first one was simple as it had no related data. My second entity has several relationships. The relationship to "Note" entity is not working.
public async Task<EditCompanyDto> GetCompanyForEdit(NullableIdDto input) { var companyEditDto = (await _companyRepository.GetAsync((int)input.Id)); var cmp = companyEditDto.MapTo<EditCompanyDto>(); return cmp; }
The code above works just fine in my existing MVC5 template solution. When I run this in the .Net core solution, it does not bring the "Note" entity data. This time my company record has a valid NoteId in the DB.
Here is my EditCompanyDto
[AutoMap(typeof(Company))] public class EditCompanyDto : EditCompanyDtoForUpdate { public DateTime CreationTime { get; set; } public int CreatorUserId { get; set; } public string CreatedByUser { get; set; } public DateTime LastModificationTime { get; set; } public int LastModifierUserId { get; set; } public string LastModifiedByUser { get; set; } public EditNoteHeaderDto Note { get; set; } public List<EditCompanyAddressDto> Addresses { get; set; } public List<EditCompanyContactDto> Contacts { get; set; } public EditCompanyDto() { Addresses = new List<EditCompanyAddressDto>(); Contacts = new List<EditCompanyContactDto>(); } }
Can you please tell me if I need to do something different in .Net core to make this work?
-
0
hello
you need to include Note entity. so your code must be something like this
_homeRepository.GetAll().Include(x=>x.Note).Where(x=>x.Id==input.Id)
-
0
I tried that out and it leads to multiple other issues. There is no ASYNC IEnumerable version of GetAll method. So that forces me to change the method signature and the signature of the MVC controller method that calls this app service method. Plus it fails in the app service method on this line:
var cmp = companyEditDto.MapTo<EditCompanyDto>();
With the error below:
Missing type map configuration or unsupported mapping. Mapping types: EntityQueryable`1 -> EditCompanyDto Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[[EXLNT.NursingOps17.NursingOps.Company, EXLNT.NursingOps17.Core, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null]] -> EXLNT.NursingOps17.NursingOps.Dto.EditCompanyDto
However, what I dont understand is I have two other related entities address and contact on this entity and they are both getting returned with the code I shared. Note entity is the only one it keeps returning as NULL. Is this something related to EF core change?
-
0
Hi @exlnt,
Can you share full code of your app service ?
Thanks.
-
0
Here is my app service code: <a class="postlink" href="https://docs.google.com/document/d/1KrL1oCvwssdyDGfcue8HlANAUtI1bCuH2cToMfiVSxM/edit?usp=sharing">https://docs.google.com/document/d/1KrL ... sp=sharing</a>
-
0
Hi @exlnt,
Entity Framework Core does not support lazy loading at the moment. Can you try to load your Note entity using _companyRepository.EnsureLoadedAsync after below line:
var companyEditDto = (await _companyRepository.GetAsync((int)input.Id));
Thanks.
-
0
I posted this same issue question on stackoverflow and a person suggested the below code and it worked!
var companyEditDto = _companyRepository.GetAll() .Include(c => c.Addresses) .Include(c => c.Contacts) .Include(c => c.Note).ThenInclude(N => N.Notes) .FirstOrDefault(x => x.Id == input.Id);
I am concerned about doing the GetAll() in all my GetForEdit app services and how it will impact the performance of my app as more data gets into the DB?
I tried your suggestion, but I could not figure out or understand what parameters I need to pass to this method. Can you share a full example call and what all parameters I need to pass into this method?
-
0
Hi @exlnt,
I think I understand your case wrong, so don't apply my suggestion. This usage is better for your case.
Using GetAll returns an IQueryable, so this linq query on returns a single record from database. This will not cause a performance problem I think.
Thanks.