1
をコレクションメンバーを無視:私はクラスのように定義されているEFコアに
public class Subject
{
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set;
[ForeignKey("LevelId")]
public Level Level { get; set; }
[ForeignKey("ParentId")]
public Subject Parent { get; set; }
public ICollection<Subject> Children { get; set; }
}
そして作成する方法:
public int Create(Subject newSubject)
{
var subjectToAdd = _mapper.Map<dataModels.Subject>(newSubject);
_context.Add(subjectToAdd);
SaveChildren(subjectToAdd.Id, newSubject.LevelId, newSubject.Children);
_context.SaveChanges();
return subjectToAdd.Id;
}
私の問題は、子供たちは二度、一度では、保存されているということです。
_context.Add(subjectToAdd);
ためのマッピング時に、子供たちは
で再び、その後マッピングされ、SaveChildren();
私が達成したいのは、EFがChildrenコレクション内の変更を無視し、SaveChildren()で手動で変更を保存することです。
は、私はこれを追加してみました:var subjectToAdd = _mapper.Map<dataModels.Subject>(newSubject);
_context.Add(subjectToAdd);
_context.Entry(user).Property(x => x.Children).IsModified = false; // this line
が、それはうまくいきませんでした。また、それをnullにしようとしましたが、それは切断されたエラーに関する何かを言った。そのプロパティを削除せずにEFでChildrenコレクションを無視させるにはどうしたらよいですか?
なぜ 'SaveChildren'コールを削除しないのですか?一般に、1つのビジネストランザクションに複数のコンテキストを含めることは避けるべきです。理想的には、1つのデータベーストランザクションで1つのビジネストランザクションを処理し、1つの 'SaveChanges'コールで結論づける必要があります。 –