Ich habe Kunden- und Adressklassen, etwa wie folgt:ASP .NET Web API SaveChangesAsync mit Fremdschlüsseldaten
public class Customer
{
[PrimaryKey]
public int Id { get; set; }
public string CustomerName { get; set; }
public int ShippingAddressId { get; set; }
[ForeignKey("ShippingAddressId")]
public Address ShippingAddress { get; set; }
}
public class Address
{
[PrimaryKey]
public int Id { get; set; }
public string City { get; set; }
}
Wenn ich eine Web-API aufrufen, den Kunden zu aktualisieren, gebe ich ein bearbeitetes Customer-Objekt zu diesem Methode. Zum Beispiel bearbeiten I 2 Eigenschaften: Customer.CustomerName und Customer.ShippingAddress.City
AuthenticationResult ar = await new AuthHelper().AcquireTokenSilentAsync();
if (ar.Token == null) return false;
using (var json = new StringContent(JsonConvert.SerializeObject(entity), UnicodeEncoding.UTF8, "application/json"))
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(Settings.ApiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ar.Token);
using (HttpResponseMessage response = await client.PutAsync("api/" + type.ToString() + "/" + id, json))
{
response.EnsureSuccessStatusCode();
return await InsertOrReplaceResponse(type, response);
}
}
Hier ist der Web-API:
[HttpPut("{id}")]
public async Task<IActionResult> PutCustomer([FromRoute] int id, [FromBody] Customer customer)
{
_context.Entry(customer).State = EntityState.Modified;
await _context.SaveChangesAsync();
return new StatusCodeResult(StatusCodes.Status204NoContent);
}
jedoch nur Customer.CustomerName aktualisiert wird. Die Fremdschlüsseldaten (Customer.ShippingAddress.City) werden nicht in der Adresstabelle aktualisiert.
Irgendeine Idee, was ich falsch mache?
Danke!
Danke. Ich schwöre, ich habe es vorher versucht und es hat nicht funktioniert, aber jetzt tut es es. Ich musste zu der Zeit etwas anderes falsch in meinem Code haben. Vielen Dank! – Primico
Ich bin neugierig auf eine Sache .. Was ist, wenn ich versuche, einen Kunden und eine Adresse zu aktualisieren, wo der Kunde bereits existiert und die Adresse nicht existiert. Ist es schlau genug, den Kunden zu aktualisieren und die neue Adresse einzugeben? – Primico
@Primico müssen Sie den 'State' der' ShippingAddress' Entität auf 'EntityState.Added' setzen. EF wird eine Ausnahme auslösen, wenn es für eine neue Adresse "Modified" ist. Ich würde empfehlen, Adress-ID-Generierung in Ihrer API zu behandeln. Wenn die Adresse mit einer ID geliefert wurde, wird sie von der API aktualisiert. Wenn es ohne ID kam, wird die API versuchen, eine neue Adresse zu erstellen. –