我正在开发WPF中的POS。 对于CRUD操作,我正在使用Entity Framework。
ProductController类ProductController Calss Snap中的实体框架的对象
创建了一个方法:SaveProduct(Product product),它将产品对象作为参数并使用EF将其保存到数据库。
从Xaml.Cs我调用ProductController Class的Saveproduct方法并将新产品数据发送给它。
private void Button_Click(object sender, RoutedEventArgs e)
{
ProductController pc = new ProductController();
PRODUCT product = new PRODUCT();
product.PRODUCT_NAME = Product_Name.Text.ToString();
product.UNITPRICE = Convert.ToInt32(Unit_Price.Text.ToString());
product.CATEGORY_Id = 1;
pc.SaveProduct(product);
MessageBox.Show("Product Added Successfully");
this.Close();
}
在ProductController中,以下代码正在更新数据库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PizzaLounge.Models;
namespace PizzaLounge.Controllers
{
public class ProductController
{
PizzaLoungeEntities db = new PizzaLoungeEntities();
public void SaveProduct(PRODUCT product)
{
db.PRODUCTs.Add(product);
db.SaveChanges();
}
}
}
我是否遗漏了某些内容或使用错误的方法来更新数据库?
答案 0 :(得分:1)
因为你正在使用附加到项目的 mdf文件所以你的问题就像这个问题
Attaching database to my project
您正在将数据保存到 bin \ debug 文件夹中的数据库,然后您会看到项目文件夹中的mdf文件,但您看不到数据。
将您的连接字符串从 DataDirectory 更改为 项目数据库文件的绝对路径。部署时,只需将其更改回 | DataDirectory |
答案 1 :(得分:1)
您可能正在使用| DataDirectory |在你的连接字符串中。如果在Visual Studio中进行调试,则您使用的数据库位于bin / debug文件夹中。 不幸的是,如果您通过服务器资源管理器查看数据库,它会有一个不同的连接字符串,因此您看不到更改。
此外,如果数据库属性“复制到输出目录”设置为“始终复制”,则每次调试时都将覆盖数据库,并且您将看不到添加的数据。您可以通过在添加记录的同一调试会话中使用新的db上下文来检查是否发生了这种情况。如果新上下文可以从db获取记录,那么您知道它们必须被写入(以及注释中列出的其他检查)
可以通过将“复制到输出目录”更改为“从不复制”或“复制为更新”来解决此问题。
答案 2 :(得分:-1)
您是如何从db.PRODUCTs或数据库资源管理器中检查产品是否尚未添加的?
也许您只需要处理您的上下文,更改您的ProductController,例如:
using(var db = new PizzaLoungeEntities()){
db.PRODUCTs.Add(product);
db.SaveChanges();
}
或者在完成使用后配置ProductController。