La propriété est une partie de l'objet de l'information clé et ne peuvent pas être modifiés
J'ai le modèle suivant de la classe, où son NETWORKID
(PK) n'est pas généré par le système:-
public partial class NetworkInfo
{
public long NETWORKID { get; set; }
public long WORKSTATIONID { get; set; }
public string NICNAME { get; set; }
public string NICDESCRIPTION { get; set; }
public string IPADDRESS { get; set; }
public string MACADDRESS { get; set; }
public string IPNETMASK { get; set; }
public string NETWORK { get; set; }
public string GATEWAY { get; set; }
public string ISDHCP { get; set; }
public string DHCPSERVER { get; set; }
public string NICLEASE { get; set; }
public virtual Resource Resource { get; set; }
}
}
maintenant, je suis d'enregistrer le courant networkinfo entités à l'intérieur d'une liste, alors je veux l'ajouter à nouveau , par l'attribution de NetworkID à eux. j'ai donc essayer les suivantes :-
public void SaveAdditionalNeyworkInfo(long assetid, List<NetworkInfo> networkinfo)
{
int i = 1;
long max = entities.NetworkInfoes.Max(a => a.NETWORKID);
foreach (var e in networkinfo.OrderBy(a=>a.NETWORKID))
{
if (i == 1)
i++;
else
{
e.NETWORKID = max + 1;
entities.NetworkInfoes.Add(e);
max++;
}
}
}
mais cette hausse d'erreur suivants:-
The property 'NETWORKID' is part of the object's key information and cannot be modified.
mais si je le ré-écrire comme suit ensuite je peux ajouter de nouvelles entités :-
public void SaveAdditionalNeyworkInfo(long assetid, List<NetworkInfo> networkinfo)
{
int i = 1;
long max = entities.NetworkInfoes.Max(a => a.NETWORKID);
foreach (var e in networkinfo.OrderBy(a=>a.NETWORKID))
{
if (i == 1)
i++;
else
{
NetworkInfo n = new NetworkInfo()
{
NETWORKID = max+1,
WORKSTATIONID = assetid,
NICNAME =e.NICNAME,
NICDESCRIPTION = e.NICDESCRIPTION,
IPADDRESS = e.IPADDRESS,
MACADDRESS=e.MACADDRESS,
IPNETMASK=e.IPNETMASK,
NETWORK=e.NETWORK,
GATEWAY=e.GATEWAY,
ISDHCP=e.ISDHCP,
DHCPSERVER=e.DHCPSERVER,
NICLEASE=e.NICLEASE
};
entities.NetworkInfoes.Add(n);
max++;
}
}
donc ma question est pourquoi dans la première approche, j'ai une erreur que le NetworkID ne peut pas être modifié , alors que dans la seconde approche, je n'ai pas d'erreur ? bien que dans les deux cas, je suis attribuer le NetworkID à l'intérieur de mon code ?
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous lisez d'abord les enregistrements de Contexte EF(Liste networkinfo argument de fonction), puis essayez de mettre à jour les clés primaires. Comme vous le lisez, EF pistes pour les modifications et les mises à jour sur SaveChages(malgré que vous avez appelé la méthode Add ce qui implique d'insérer). Si la demande de base de données pourrait être:
Mais EF ne permet pas de modifier la clé primaire et la raison, probablement, comme décrit ici, dans les commentaires par KM:
De sorte que vous obtenez une exception dans le premier cas.
Dans le second cas nouvel objet vient à l'EF, et une habitude insertion sera envoyer au serveur de base de données.