2016-02-17 12 views
8

tôi đang cố gắng để gieo rắc một cơ sở dữ liệu bằng cách sử dụng phương pháp context.AddOrUpdate, nhưng vấn đề là tôi cần phải làm cho dữ liệu chèn độc đáo dựa trên một chỉ số cột đa.Entity Framework - Seed AddOrUpdate với chỉ số cột đa như nhận dạng

[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; } 
} 

Hiện nay tôi AddOrUpdate dựa trên Name của lớp leo núi, nhưng bây giờ tôi đang ở một điểm mà tôi cần phải chèn tên trùng lặp.

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 
    }); 

Có thể so sánh chỉ mục nhiều cột khi tôi chèn dữ liệu hạt giống không?

+0

Ý của bạn là gì "có thể so sánh ...?" Bạn chính xác muốn làm gì? Bạn có muốn chỉ giữ một số giá trị lặp lại có thể không? – JotaBe

+1

Tôi muốn sử dụng chỉ mục đa cột làm tham chiếu nếu tập dữ liệu đã tồn tại trong cơ sở dữ liệu. ví dụ: '.AddOrUpdate (cấp => cấp.Name == hiện tại.Name && grade.GradeType == existing.GradeType)' – Silthus

Trả lời

7

Bạn cần sử dụng loại ẩn danh để chỉ định nhiều cột. Điều này cũng hoạt động mà không cần chỉ định các chỉ dẫn.

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 
    }); 
Các vấn đề liên quan