FreemanA.とSandersonSによる「ProASP.NetMVC3FrameworkThirdEdition」という本を読んでフォローしています。
エンティティを更新する方法を教えてくれる部分に到達しました。アップデートを除いて、すべて正常に動作します。
ストア内のアイテムを編集するためのページがあります。かなり基本的です。ページの値を変更して送信すると、新しい値を使用して、必要な方法でリポジトリの実装に到達します。
これで、この本は私のリポジトリ(SaveProduct)で次のメソッドを示しています。
namespace SportsStore.Domain.Concrete
{
public class EFProductRepository : IProductRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<Product> Products
{
get { return context.Products; }
}
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
context.SaveChanges();
}
}
}
この方法は、製品を保存しないことを除いて機能します。私はMVC3の曖昧さを完全に理解していないので、行き詰まっています。製品は、適切な値でSaveProductメソッドのパラメーターとして到着し、保存する必要がありますが、コンテキストは更新されません。
これはMVC3で更新されたものですか?(この本は少し時代遅れですか?)すべての値を個別にチェックする場合はコード化できますが、MVC3 /EntityFrameworkの能力が失われていると感じずにはいられません。
誰か助けてもらえますか?どうもありがとう!:)その間、私はデバッグして手がかりを探します!
編集:
SaveChanges()が返す整数をキャッチすると、ゼロのように見えます。したがって、新しい値を持つエンティティは、エンティティフレームワークに「更新」されていないと思います。
編集2:
私は(すでに)問題を見つけました。質問が速すぎたようですが、お詫び申し上げます。これが私がしたことです:
SaveProductメソッドに次のコードを追加しました。
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
else
{
var productInDb = context.Products.FirstOrDefault(x => x.ProductID == product.ProductID);
context.Entry(productInDb).CurrentValues.SetValues(product);
}
context.SaveChanges();
}
私はこれがそうするための1つの適切な方法だと思いますか?役に立たない質問でごめんなさい:)