asp.net mvc 3 + EFコードを最初に勉強しています。私は両方とも初めてです。私の例は些細なことですが、それでも機能させることはできません。シンプルで明白なものが欠けています...
私はクラスを持っています:
public class Product
{
[HiddenInput(DisplayValue = false)]
public int ProductID { get; set; }
[Required(ErrorMessage = "Please enter a product name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please enter a description")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
[Required]
[Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")]
public decimal Price { get; set; }
[Required(ErrorMessage = "Please specify a category")]
public string Category { get; set; }
}
とDbContext
:
public class EFDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
およびリポジトリ:
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();
}
}
mvc コントローラー:
public class AdminController : Controller
{
private IProductRepository repository;
public AdminController(IProductRepository repo)
{
repository = repo;
}
public ViewResult Index()
{
return View(repository.Products);
}
public ViewResult Edit(int productId)
{
Product product = repository.Products.FirstOrDefault(p => p.ProductID == productId);
return View(product);
}
[HttpPost]
public ActionResult Edit(Product product)
{
if (ModelState.IsValid)
{
repository.SaveProduct(product);
TempData["message"] = string.Format("{0} has been saved", product.Name);
return RedirectToAction("Index");
}
else
{
// there is something wrong with the data values
return View(product);
}
}
}
製品のリストを表示し、編集ビューを開き、一連の属性に従ってすべてを検証します...
検証済みの変更を保存すると、Http PostEdit
メソッドに移動し、必要なSaveChanges()
.
例外はスローされず、続行され、製品のリストにリダイレクトされます。
編集された項目は変更されません。
基礎となるデータベース ( で接続されてconnectionstrings
いるweb.config
) も変更されません。