实体框架不会将数据保存到WPF中的数据库

时间:2016-06-07 06:04:19

标签: c# wpf entity-framework xaml

我正在开发WPF中的POS。 对于CRUD操作,我正在使用Entity Framework。

  1. 创建了WPF View ProductADD Product Add View Snap
  2. 在Controller Folder
  3. 中创建了一个Class ProductController
  4. ProductController类ProductController Calss Snap中的实体框架的对象

  5. 创建了一个方法:SaveProduct(Product product),它将产品对象作为参数并使用EF将其保存到数据库。

  6. 从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();
    }
    
  7. 在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();
    		}
    	}
    }

    1. 代码成功执行但不会将产品保存在数据库中。附:我使用过db.savechanges()。
    2. 我是否遗漏了某些内容或使用错误的方法来更新数据库?

3 个答案:

答案 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。