I am trying to provide an API to insert a parent object with children objects. For testing, I modified a little from the phonebook example, but it always throws out System.NullReferenceException: Object reference not set to an instance of an object.
Here is my code:
public async Task<PhoneInPersonListDto> AddPhone(AddPhoneInput input)
{
var person = new Person();
person.Name = "x";
person.Surname = "y";
var phone = ObjectMapper.Map<Phone>(input);
person.Phones.Add(phone);
var personId = await _personRepository.InsertAndGetIdAsync(person);
return ObjectMapper.Map<PhoneInPersonListDto>(phone);
}
Can you advise what I missed?
Thanks,
3 Answer(s)
-
0
Hi,
You need to create an empty list for Phones of person before adding an item to it. You can do it in the constructor of your Person entity.
Thanks.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Got it. Because the Phone is defined in Person as virtual ICollection<Phone>, it is not initiated along with "new Person()". I modified my code as following (adding 2 lines with comment):
public async Task<PhoneInPersonListDto> AddPhone(AddPhoneInput input) { var person = new Person(); person.Phones = new List<Phone>(); // concrete ICollection<Phone> person.Name = "x"; person.Surname = "y";
var phone = ObjectMapper.Map<Phone>(input); person.Phones.Add(phone);
var personId = await _personRepository.InsertAndGetIdAsync(person); var phoneId = phone.Id; // Cannot get this if using InsertAsync(person).
return ObjectMapper.Map<PhoneInPersonListDto>(phone); }
It works as expected. Thank you! :)
BTW, do you think the "new List<T>(); " is the best way to initiate ICollection<T>?
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi,
BTW, do you think the "new List<T>(); " is the best way to initiate ICollection<T>?
I personally use it like that but I don't know if it is the best way or not :)
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image)