編集エラーをより適切に分離しました。下記参照。
C# Code-First EF モデルに and クラスがありますParentObject
。ChildObject
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
(したがって親) に対応しているため、そのようなことはしませんでした。