gpt4 book ai didi

c# - 无法在 ASP.Net MVC 3 项目中使用 Entity Framework 保存更改

转载 作者:太空狗 更新时间:2023-10-29 22:19:48 24 4
gpt4 key购买 nike

学习 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 Controller :

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);
}
}
}

它让我看到产品列表,打开编辑 View ,根据属性集验证一切...

当我保存经过验证的更改时,它会转到 Http Post Edit 方法并进行必要的 SaveChanges()

它没有抛出任何异常,它继续并将我重定向到产品列表。

编辑的项目保持不变。

底层数据库(通过 web.config 中的 connectionstrings 连接)也保持不变。

最佳答案

您需要附加在 EF 外部创建的实体实例,并让 EF 知道它已被修改。

public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
else
{
context.Products.Attach(product);
context.Entry(product).State = EntityState.Modified;
}

context.SaveChanges();
}

关于c# - 无法在 ASP.Net MVC 3 项目中使用 Entity Framework 保存更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12050585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com