I am trying to update a record and I get this error message after the context.SaveChanges();
The property 'name' is part of the object's key information and cannot be modified.
Here is the code for the update function:
if (context.EAT_SourceNames.Any(e => e.name == newSourceName))
{
MessageBox.Show("Name already exists in the Database");
}
else
{
var nameToUpdate = context.EAT_SourceNames.SingleOrDefault(e => e.name == sourceName.name);
if (nameToUpdate != null)
{
nameToUpdate.name = newSourceName;
context.SaveChanges();
RefreshDGVs();
}
}
My SourceNames
class looks like the following:
public EAT_SourceNames()
{
this.EAT_Sources = new ObservableListSource<EAT_Sources>();
}
public string name { get; set; }
public string version_id { get; set; }
public string allocation_name { get; set; }
I searched for similar questions, but could not find any working solution.
"The property 'Id' is part of the object's key information and cannot be modified."
PersonnelCode' is part of a key and so cannot be modified or marked as modified. To change the principal of an existing entity with an identifying foreign key, first delete the dependent and invoke 'SaveChanges', and then associate the dependent with the new principal.
See the answer from yildizm85 to this question: entity framework not working on table without identity column
"Entity Framework requires a Primary Key to generate a model from the database. If there is no Primary Key on a table it will simply select the non-nullable columns as a concatenated primary key and the Entity will be read/only."
Looking at your EAT_SourceNames
object it appears there is no primary key field so the Entity Framework is using the column 'name' as part of the composite key which means it is read-only.
The solution would be to add a Primary Key field to EAT_SourceNames
and then your 'name' field would no longer be part of the primary key.
Same happened to me today. I set new entity's ID with the old record's ID and the error is gone.
//This checks whether there's a record with same specific data.
var kayitVarMi = _db.Sorgu.FirstOrDefault(a => a.Serial == sorgu.Serial);
if (kayitVarMi != null) // If there's
{
sorgu.Id = kayitVarMi.Id; //This one does the trick
_db.Entry(kayitVarMi).CurrentValues.SetValues(sorgu);
}
else // If not
{
_db.Sorgu.Add(sorgu);
}
// This whole block is in a transaction scope so I just check recordability.
if (_db.SaveChanges() > 0)
{
_sorguKaydedildiMi = true;
}
Here is the proper solution of it.
You have to unchecked entity key of Name from your EAT_SourceNames.
You can do this by following steps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With