J'ai des difficultés avec mon .NET Core Api 2.1.
J'ai configuré une base de données dans SQL Server 2017 et créé mes tables avec toutes les conventions appropriées, FK, PK, etc.
Les tableaux sont structurés comme suit:
Contacts:
namespace ContactsApi
{
public partial class Contacts
{
public Contacts()
{
Addresses = new List<Addresses>();
Emails = new List<Emails>();
Numbers = new List<Numbers>();
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Company { get; set; }
public string ProfileImage { get; set; }
public DateTime? Birthday { get; set; }
public string Notes { get; set; }
public List<Addresses> Addresses { get; set; }
public List<Emails> Emails { get; set; }
public List<Numbers> Numbers { get; set; }
}
}
Adresses:
namespace ContactsApi
{
public partial class Addresses
{
public int Id { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string AddressLine3 { get; set; }
public string CityRegion { get; set; }
public string StateProvince { get; set; }
public string ZipPostalCode { get; set; }
public string Country { get; set; }
public string Category { get; set; }
public int ContactId { get; set; }
public Contacts Contact { get; set; }
}
}
Nombres:
public partial class Numbers
{
public int Id { get; set; }
public string Category { get; set; }
public string PhoneNumber { get; set; }
public int ContactId { get; set; }
public Contacts Contact { get; set; }
}
Courriels
public partial class Emails
{
public int Id { get; set; }
public string Email { get; set; }
public string Category { get; set; }
public int ContactId { get; set; }
public Contacts Contact { get; set; }
}
Toutes les entités ont une relation plusieurs à un sauf une, qui a une relation un à plusieurs.
J'ai ensuite échafaudé mon projet à l'aide d'Entity Framework Core 2.1.
Lors des tests initiaux, je n'ai pas .Include()
mes adresses, numéros et courriels. Les contacts sont bien revenus jusqu'à ce que .Include()
de .Include()
les autres propriétés et que mes données soient tronquées à la première ligne de données sans fermer le JSON. Cela se produit, peu importe ce que je .Include()
.
Je récupère également le message d'erreur suivant dans Chrome
Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR
Voici mon projet original, qui fonctionne sauf que id ne renvoie pas les tables relationnelles:
[HttpGet]
public IActionResult GetContact()
{
var joinedContacts = _context.Contacts;
return new ObjectResult(joinedContacts) { StatusCode = 200 };
}
Il retourne ce JSON:
[{"id":1,"firstName":"Ryan","lastName":"Peterson","company":"RK Peterson Media","profileImage":"ryanpeterson.jpg","birthday":"2018-06-24T00:00:00","notes":"Technically sophisticated Full Stack Web Developer with solid history of innovative solutions for a wide range of clients and businesses. Demonstrated success in web and application development with proficiency in front end, back end, UI/UX, coding, software, and application design. Excel at SEO-based web design, Google Analytics, PCI compliance, project management, and full life cycle software development (SDLC). Skilled trainer and project leader; able to concurrently lead the creation and launch of various websites for a diverse clientele.","addresses":[],"emails":[],"numbers":[]},{"id":2,"firstName":"Walter","lastName":"White","company":"Grey Matter","profileImage":"noimage.jpg","birthday":"2018-06-24T00:00:00","notes":"Seems a lot more irritable since the diagnosis... who can blame him trying to feed a family on a teachers salary?","addresses":[],"emails":[],"numbers":[]},{"id":3,"firstName":"Alejandro","lastName":"Rose-Garcia","company":"Pan American Drums","profileImage":"noimage.jpg","birthday":"2018-06-24T00:00:00","notes":"This guy!","addresses":[],"emails":[],"numbers":[]},{"id":4,"firstName":"Justin","lastName":"Trudeau","company":"Canada","profileImage":"noimage.jpg","birthday":"2018-06-24T00:00:00","notes":"Can explain quantum physics! Not clear on his policy, but at least he''s super cool!","addresses":[],"emails":[],"numbers":[]}]
Voici ma déclaration d'inclusion:
[HttpGet]
public IActionResult GetContact()
{
var joinedContacts = _context.Contacts
.Include(a => a.Emails)
.Include(a => a.Addresses)
.Include(a => a.Numbers)
.ToList();
// add Count of results for validation
if (joinedContacts.Count > 0)
return new ObjectResult(joinedContacts) { StatusCode = 200 };
else
return new ObjectResult(null) { StatusCode = 404 };
}
Cet appel retourne:
[{"id":1,"firstName":"Ryan","lastName":"Peterson","company":"RK Peterson Media","profileImage":"ryanpeterson.jpg","birthday":"2018-06-24T00:00:00","notes":"Technically sophisticated Full Stack Web Developer with solid history of innovative solutions for a wide range of clients and businesses. Demonstrated success in web and application development with proficiency in front end, back end, UI/UX, coding, software, and application design. Excel at SEO-based web design, Google Analytics, PCI compliance, project management, and full life cycle software development (SDLC). Skilled trainer and project leader; able to concurrently lead the creation and launch of various websites for a diverse clientele.","addresses":[{"id":3,"addressLine1":"223 W Jackson Blvd","addressLine2":null,"addressLine3":null,"cityRegion":"Chicago","stateProvince":"IL","zipPostalCode":"60606-6908","country":"United States","category":"Home","contactId":1
Quelqu'un a une idée de la raison pour laquelle les données sont tronquées? Y a-t-il des limites que je ne connais pas?
Je vous remercie!
Voici un lien où j'ai trouvé cette pépite. NOTE: Il y a une description très complète de ce qui se passe.
var jsonSerializerSettings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
};
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonNetFormatter(jsonSerializerSettings));