I've been struggling with changing values in a database for a week and can't find out what I'm doing wrong. I managed to create tables, to add and delete entities but I can't change a value inside an entity.
The error I get is: The property 'Rating' on entity type 'Generation' is part of a key and so cannot be modified or marked as modified. To change the principal of an existing entity whith an identifying foreign key first delete the dependent and invoke 'SaveChanges' then associate the dependent with the new principal.
(I'm not used to the term principal but I think it is the entity which has the unique Key. I not used to the term dependent either in a database context but I think it is the entity in another table which has a link to the principal)
FYI: I'm using Microsoft.AspNetCore.All 2.0.0, Microsoft.EntityFrameworkCore 2.0.0 and Npgsql.EntityFrameworkCore.PostgreSQL 2.0.0
I'm sure this error message tries to tell me the solution but as far as I know there is nothing dependent on Rating and it's not a key. For context here are the two classes I'm using for tables in the database:
[Table("Generation")]
public class Generation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int GenerationId { get; set; }
[Required]
[MaxLength(100)]
public string DNA { get; set; }
//[Editable(true)]
public double Rating { get; set; }
public Generation(int ID, string dna, double rate)
{
GenerationId = ID;
DNA = dna;
Rating = rate;
}
public Generation()
{
}
}
[Table("Device")]
public class Device
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DeviceID { get; set; }
//[Required]
[MaxLength(100)]
public string Identifier { get; set; }
//[ForeignKey("GenerationId2")] <-- should be changed to GenerationId in the near future
public int GenerationId2 { get; set; }
public float WaitingSeconds { get; set; }
}
(It's a database I want to keep on a server for genetic algorithms)
The code I use to change the data is quite simple but causes the error on SaveChanges():
Generation gen = Program.Context.Generation.FirstOrDefault(g => g.Rating < 0.0);
if (gen != null)
{
gen.Rating = 10.0;
Debug.Log("DNA: About to save changes");
Program.Context.SaveChanges();
}
(The generations are created with a negative rating to indicate that that DNA has not been tested yet)
I experimented with different data annotations such as [Editable(true)], [Required] and [ForeignKey] <- which I suppose marks it as dependent on the principal from another class/table.
Could someone help me out to "simply" change some data in a table?
Kind regards!
Cambesa
but causes the error on SaveChanges()What's the error? Please add that to your post. - penleychanHasKey (...)method? - Ivan Stoev