La propriété 'nom' fait partie des informations clés de l'objet et ne peut pas être modifiée. Cadre d'entité
Je suis en train de mettre à jour un enregistrement et je reçois ce message d'erreur après la context.SaveChanges();
La propriété 'name' est la partie de l'objet de l'information clé et ne peuvent pas être modifiés.
Voici le code pour la fonction de mise à jour:
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();
}
}
Mon SourceNames
classe se présente comme suit:
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; }
J'ai cherché sur des questions similaires, mais ne pouvait pas trouver un solution de travail.
source d'informationauteur forgetaboutme | 2015-04-14
Vous devez vous connecter pour publier un commentaire.
Voir la réponse de yildizm85 à cette question: entity framework ne fonctionne pas sur la table sans colonne d'identité
"Entity Framework nécessite une Clé Primaire pour générer un modèle de la base de données. Si il n'y a pas de Clé Primaire sur une table, il suffit de sélectionner le non nullable colonnes de clé primaire concaténée et l'Entité/lecture seule".
Regardant votre
EAT_SourceNames
objet, il n'existe pas de champ de clé primaire de sorte que le Cadre de l'Entité est l'aide de la colonne " nom " dans le cadre de la clé composite qui signifie qu'il est en lecture seule.La solution serait d'ajouter un champ de Clé Primaire à
EAT_SourceNames
et puis votre nom de domaine ne serait plus de la partie de la clé primaire.Même chose m'est arrivé aujourd'hui. J'ai mis la nouvelle entité, avec l'identification du vieux record de l'identité et l'erreur a disparu.
La seule façon que je peux penser à mettre à jour un texte clé primaire est à l'aide de la suite.
Je ne crois pas qu'il est préférable d'utiliser un "fonctionnelle" de la clé primaire. Une clé primaire le but est tout simplement d'identifier de manière unique une ligne.
Probablement
name
est une partie ou de la pleine Clé Primaire de votreEAT_SourceNames
entité.Vous ne pouvez pas modifier l'objet du PK, est-il EF de limitation (voir ce fil).
Le point est que vous travaillez avec un objet. La propriété "name" identifie l'objet, c'est pourquoi vous ne pouvez pas le modifier.
La solution est de modifier la valeur dans la table avec une instruction SQL (mise à JOUR) et de recharger le contexte.
Sincèrement.