2016-02-17 3 views
8

Ich versuche, eine Datenbank mit der context.AddOrUpdate-Methode zu seeden, aber das Problem ist, dass ich die eingefügten Daten basierend auf einem mehrspaltigen Index einzigartig machen muss.Entity Framework - Seed AddOrUpdate mit mehrspaltigem Index als Bezeichner

[Table("climbing_grades")] 
public class ClimbingGrade : EntityBase 
{ 
    /// <summary> 
    /// The name of the climbing grade, e.g.: 7a, VII, etc. 
    /// </summary> 
    [Index("IX_Name_GradeType", 1, IsUnique = true)] 
    public string Name { get; set; } 

    /// <summary> 
    /// Tries to display the average difficulty of the described grade. 
    /// Matching the different grades can be difficult because its always 
    /// a subjective rating and there exists no norm on converting grades. 
    /// </summary> 
    public double Difficulty { get; set; } 

    /// <summary> 
    /// The type of the grade. Will be the respective region rating. 
    /// e.g.: UUIA for most oft europe, YSD for USA, etc. 
    /// </summary> 
    [Index("IX_Name_GradeType", 2, IsUnique = true)] 
    public ClimbingGradeType GradeType { get; set; } 
} 

Derzeit AddOrUpdate ich auf der Name der Kletter Klasse basiert, aber jetzt bin ich an einem Punkt, wo ich doppelte Namen einfügen müssen.

context.ClimbingGrades.AddOrUpdate(grade => /* Compare multi column index here?*/, 
    new ClimbingGrade 
    { 
     Name = "5a", 
     Difficulty = 4.75, 
     GradeType = ClimbingGradeType.FontainebleauBloc 
    }, 
    new ClimbingGrade 
    { 
     Name = "5a", 
     Difficulty = 4.25, 
     GradeType = ClimbingGradeType.FontainebleauTraverse 
    }); 

Ist es möglich, Multi-Spalten-Indizes zu vergleichen, wenn ich Seed-Daten einfüge?

+0

Was meinst du mit "ist es möglich zu vergleichen ...?" Was willst du genau machen? Möchten Sie nur einige der möglichen wiederholten Werte beibehalten? – JotaBe

+1

Ich möchte den mehrspaltigen Index als Referenz verwenden, wenn der Datensatz bereits in der Datenbank vorhanden ist. z. B .: '.AddOrUpdate (Note => grade.Name == existing.Name && grade.GradeType == existing.GradeType)' – Silthus

Antwort

7

Sie müssen anonymen Typ für die Angabe mehrerer Spalten verwenden. Dies funktioniert auch ohne Angabe der Indizes.

context.ClimbingGrades.AddOrUpdate(grade => new { grade.Name, grade.GradeType }, 
    new ClimbingGrade 
    { 
     Name = "5a", 
     Difficulty = 4.75, 
     GradeType = ClimbingGradeType.FontainebleauBloc 
    }, 
    new ClimbingGrade 
    { 
     Name = "5a", 
     Difficulty = 4.25, 
     GradeType = ClimbingGradeType.FontainebleauTraverse 
    }); 
Verwandte Themen