この質問は何度も聞かれることは知っていますが、変更されたフィールドを指定しているという事実は、私が解決するのを少し難しくしていると思います。これが私の更新方法です(リポジトリ内):
public Folder UpdateFolder(Folder folder)
{
_db.Folders.Attach(folder); // error happens here
var entry = _db.Entry(folder);
entry.Property(e => e.Title).IsModified = true;
SaveChanges();
return entry.Entity;
}
アタッチしようとすると「同じキーのオブジェクトが既に存在します」と表示されます。その行を削除すると、「「folder」タイプのエンティティはこのコンテキストに存在しません」というメッセージが表示されます。
これが私が(テストメソッド)からそれを呼んでいるところです:
homeFolder = _dtoServices.AddFolder(new FolderDto
{
Title = "Home Folder"
});
Assert.AreEqual(_dtoServices.GetHomeData().TotalFolders, 1);
// Check Folder
Assert.AreEqual(_dtoServices.GetFolder(homeFolder.FolderId).Details, "Home Folder");
// Update Folder, Check Folder
homeFolder.Title = "Updated";
_dtoServices.UpdateFolder(homeFolder); // HERE
Assert.AreEqual(_dtoServices.GetFolder(homeFolder.FolderId).Details, "Updated");
私のDtoServicesで:
public FolderDto UpdateFolder(FolderDto folderDto)
{
var test = _repository.UpdateFolder(folderDto.ToEntity());
return null;
}
私のFolderDto:
public class FolderDto
{
public FolderDto()
{
}
public FolderDto(Folder folder)
{
FolderId = folder.FolderId;
Title = folder.Title;
}
[Key]
public int FolderId { get; set; }
[Required]
public string Title { get; set; }
public Folder ToEntity()
{
var folder = new Folder
{
FolderId = FolderId,
Title = Title,
};
return folder;
}
}
なぜこれが起こっているのか考えていますか?