EntityFramework, Insérez s'il n'existe pas, sinon la mise à jour

Je vais avoir un Jeu d'entités de Pays, reflétant une table de base de données '<'char(2) char(3),nvarchar(50> dans ma base de données.

Im ayant un analyseur qui renvoie un Pays[] tableau de analysée pays, et d'avoir des problèmes de mise à jour dans le droit chemin. Ce que je veux, c'est: Prendre l'éventail de pays, pour ces pays de ne pas déjà dans la base de données insérer, et ceux existants mise à jour si tous les champs sont différents. Comment cela peut-il être fait?

void Method(object sender, DocumentLoadedEvent e)
{
    var data = e.ParsedData as Country[];
    using(var db = new DataContractEntities)
    {
       //Code missing


    }
}

Je pensais à quelque chose comme

for(var c in data.Except(db.Countries)) but it wount work as it compares on wronge fields.

L'espoir que quelqu'un a eu ce problème avant et que vous avez une solution pour moi. Si je ne peux pas utiliser le Pays de l'objet et de l'insérer/mettre à jour un tableau facile, je ne vois pas beaucoup benefict de l'utilisation du cadre, comme des artistes je pense que c'est plus rapide à écrire un custom script sql qui les insère à la place de l'ect vérifier si un pays est déjà dans la base de données avant de les insérer?

Solution

Voir la réponse de la poste à la place.

J'ai ajouté remplacer égal à mon pays la classe:

    public partial class Country
{

    public override bool Equals(object obj)
    {
        if (obj is Country)
        {
            var country = obj as Country;
            return this.CountryTreeLetter.Equals(country.CountryTreeLetter);
        }
        return false;
    }
    public override int GetHashCode()
    {
        int hash = 13;
        hash = hash * 7 + (int)CountryTreeLetter[0];
        hash = hash * 7 + (int)CountryTreeLetter[1];
        hash = hash * 7 + (int)CountryTreeLetter[2];
        return hash;
    }
}

et puis n':

        var data = e.ParsedData as Country[];
        using (var db = new entities())
        {
            foreach (var item in data.Except(db.Countries))
            {
                db.AddToCountries(item); 
            }
            db.SaveChanges();
        }
  • Aussi, vous pouvez utiliser nouvellement libérés de la bibliothèque qui sera automatiquement réglée à l'etat de toutes les entités de l'entité graphique. Vous pouvez la lire ma réponse à la question similaire.