2

編集エラーをより適切に分離しました。下記参照。

C# Code-First EF モデルに and クラスがありますParentObjectChildObject

public class ParentObject{
    [Key]
    public int Key{get; set;}
    [Required]
    public string Name {get; set;} //unique identifier
    public HashSet<ChildObject> TheChildren {get; set;}
}

public class ChildObject{
    [Key]
    public int Key {get; set;}
    public int ParentKey {get; set;}
    public string Name {get; set;}
    [NotMapped]
    string ParentName {get; set;}
}

 public class FamilyDB : DbContext{
    public DbSet<ParentObject> Parents { get; set; } 
    public DbSet<ChildObject> Children { get; set; }

    public FamilyDB(): base(){
        this.Parents.Load(); this.Children.Load();
    }
}

FamilyDB一連の CSV ファイルからデータベースを作成したいと考えています。はParentsすでに存在します。TheChildrenそれぞれに上書きして割り当てるだけですParentObject

しかし、私はいつもエラーになります:

public static void ImportChildFile(FamilyDB connxn, string csvPath){
    List<ChildObject> records = GetChildrenFromCsvFile(csvPath);
    var groupedRecords = records.GroupBy(x => x.ParentName);

    foreach (var recordSet in groupedRecords){
        parentName = recordSet.Key;
        ParentObject matchingParent = connxn.Parents.
            Where(x => x.Name = parentName).FirstOrDefault();

        if (matchingParent == null)
            throw new ArgumentException("No prnt named " + parentName);

        //Want to overwrite, not add - must remove all current children
        while (matchingParent.Children.Count > 0)
            connxn.TheChildren.Remove(matchingParent.Children.Last());

        matchingParent.TheChildren.UnionWith(recordSet);
        //connxn.SaveChanges(); //this would work if it was here
    }
    connxn.SaveChanges();

    /*Multiplicity constraint violated. 
    The role 'ParentObject_Children_Source' of 
    the relationship 'MyNamespace.ParentObject_Children' 
    has multiplicity 1 or 0..1.*/
}

そのエラー メッセージは、同じものParentObjectを 2 回割り当てていると非難しているようですが、それぞれrecordSetが異なるParentName(したがって親) に対応しているため、そのようなことはしませんでした。

4

0 に答える 0