【问题标题】:Unable to Insert data in an .mdf using Entity Framework无法使用实体框架在 .mdf 中插入数据
【发布时间】:2015-01-26 19:19:59
【问题描述】:

我正在尝试使用实体框架在 .mdf 文件中插入数据,但数据库中没有保存数据。 (我使用的是 VS 2013)

按钮的代码是

private void BtnSubmit_Click(object sender, RoutedEventArgs e)
    {
        Product record = new Product();
        record.ProductName = txtProductName.Text;
        AzadIndustryEntities1 Db = new AzadIndustryEntities1();
        Db.Products.Add(record);
        Db.SaveChanges();
        MessageBox.Show("Record Inserted");
    }

针对 Products 表的 SQL 是

CREATE TABLE [dbo].[Products] (
[ProductID]          INT          IDENTITY (1, 1) NOT NULL,
[ProductName]        VARCHAR (50) NULL,
[ProductQuantity]    INT          NULL,
[PricePerUnit]       VARCHAR (50) NULL,
[ProductDescription] VARCHAR (50) NULL,
[UserID]             INT          NULL,
[CustomerID]         INT          NULL,
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED ([ProductID] ASC),
CONSTRAINT [FK_Products_ToTable_Customer] FOREIGN KEY ([CustomerID]) REFERENCES [dbo].[Customer] ([CustomerID]),
CONSTRAINT [FK_Products_ToTable_Products] FOREIGN KEY ([UserID]) REFERENCES [dbo].[Users] ([UserID])

);

【问题讨论】:

  • 您看到的错误是什么?您是否确保在添加时设置了所有必需的非空字段?很难从你那里有什么来判断。
  • 您能否使用调试器单步执行您的代码以查看发生了什么?
  • 没有错误程序正在执行,没有任何错误或异常。只有一个非空字段是Product ID,它是自动生成的。
  • 什么是产品?你的数据库实体?因为“Db.Products.Add(record);”产品与产品不匹配。如果不深入了解您的模型,很难判断。
  • 产品是模型类,产品是数据库模型的实体

标签: c# .net entity-framework visual-studio-2013 mdf


【解决方案1】:

我的问题解决了。将对其进行解释,以便它也可以帮助其他人。

由于.mdf文件复制到输出目录的默认属性是始终复制,所以当我们调试我们的程序时,复制一份.mdf文件。 mdf 文件复制到 bin 文件夹 中的 debug 文件夹(在 Solution Explorer 中选择 Show All Files查看 bin 文件夹)因此,我们通过 code 在数据库中所做的任何更改都保存在调试文件夹中的 copyed .mdf 中。当我们调试我们的程序再次再次执行相同的步骤并且之前的数据库被覆盖。为防止这种情况发生,上述 .mdf 文件的属性应设置为 Copy if newer 因此,如果模型有任何更改,则 .mdf 将被覆盖。

【讨论】:

    【解决方案2】:

    而不是实例化模型对象并添加到您的实体对象。尝试直接访问您的实体对象:

    private void BtnSubmit_Click(object sender, RoutedEventArgs e)
        {
            AzadIndustryEntities1 Db = new AzadIndustryEntities1();
            Products product = new Products();
            Products.ProductName = txtProductName.Text;
            Db.Products.Add(product);
            Db.SaveChanges();
            MessageBox.Show("Record Inserted");
        }
    

    //编辑 - 希望不同的方法能奏效。

    private void BtnSubmit_Click(object sender, RoutedEventArgs e)
     {
       AzadIndustryEntities1 Db = new AzadIndustryEntities1();
       Product p = new Product() { p.ProductName = txtProductName.Text };
       db.AddToProducts(p);
       db.SaveChanges();
     }
    

    【讨论】:

    • 我无法使用它,因为 .sln 中不存在这样的 Products 类。
    • 抱歉...您有 EF 为您创建的模型查看器/对象查看器吗?
    • 抱歉回复晚了。是的,我确实有模型查看器。我应该添加它的 snap 吗?
    【解决方案3】:

    以下内容以前对我有用。

    private void BtnSubmit_Click(object sender, RoutedEventArgs e)
     {
       AzadIndustryEntities1 Db = new AzadIndustryEntities1();
       Product p = db.Products.Create()
       p.ProductName = txtProductName.Text;
       db.Products.Add(p);
       db.SaveChanges();
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多