Próbuję zrobić aplikację opartą na WebAPI. Stanąłem przed następującym problemem: przy dodawaniu do bazy metodą POST danych z formularza zawierającego element dropdown wypełniany na podstawie danych z bazy jeśli wysyłam w JSONie podobiekt z polem 'id' obiektu ToolTypes:
{"name":"piła","rentalPrice":10,"toolType":{"id":1,"type":"ręczne"},"toolTypeId":1,"barcode":"2"}
to baza protestuje że nie mogę tego robić jawnie: "SqlException: Cannot insert explicit value for identity column in table 'ToolTypes' when IDENTITY_INSERT is set to OFF."
W bazie mam już ToolType {"id":1,"type":"ręczne"}.
Jeśli wysyłam JSONa bez 'id' obiektu ToolTypes, to dodaje również nowy podobiekt z nowym ID, na przykład:
wysyłam: {"name":"piła","rentalPrice":10,"toolType":{"type":"ręczne"},"toolTypeId":1,"barcode":"2"}
tworzony jest obiekt w ten sposób: {"id":5,"name":"piła","rentalPrice":10.0,"toolType":{"id":7,"type":"ręczne"},"toolTypeId":7,"barcode":"2"}
Celem jest utworzenie takiego nowego obiektu:
{"id":5,"name":"piła","rentalPrice":10.0,"toolType":{"id":1,"type":"ręczne"},"toolTypeId":1,"barcode":"2"}
Jak to zrobić poprawnie?
Obiekt Tool mam zdefiniowany tak:
public class Tool
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
[DataType(DataType.Currency)]
[Column(TypeName = "decimal(10, 2)")]
public decimal RentalPrice { get; set; }
[Required]
public ToolType ToolType { get; set; }
public int ToolTypeId { get; set; }
[Required]
public string Barcode { get; set; }
}
natomiast obiekt ToolType tak:
public class ToolType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Type { get; set; }
}