类类型不转换为IDisposable,并且.SaveChanges方法不存在

时间:2017-10-09 21:35:11

标签: c# asp.net-mvc class entity-framework-6

所以我作为课程的一部分进行了练习,它是创建一个没有数据库或模型的ASP.NET MVC应用程序,并使用代码生成一个。在一个部分,我得到了一些代码,你将在下面看到。 我已经尝试将| IDisposable添加到类中但仍然抛出上述错误。

至于.SaveChanges不工作我听说这是因为找不到实体框架,但我尝试将System.Data.Entity添加到using语句以及在项目选项中添加引用。

这是问题代码:

    public class HomeController : Controller
    {
    public ActionResult Index()
    {
        Models.Product p = new Models.Product();
        p.Product_Code = "SOFT549";
        p.Product_Name = "Book";

        using (var db = new Models.StoreDB()) 
        {
            db.products.Add(p);
            db.SaveChanges();
            ViewBag.Message = "The number of products so far is " + db.products.Count().ToString();
        }

        return View();
    }
  }

这是产品类:

    public class Product
{
    public int ProductId { get; set; }
    public string Product_Code { get; set; }
    public string Product_Name { get; set; }
    public float Price { get; set; }
    public int Stock { get; set; }

    public Product()
    {

    }

}

这是StoreDB类,它继承了一个空白的DbContext,我假设我会被告知稍后添加一些东西,但是在工作表上我被告知它要运行代码意味着它应该在这里编译状态。

    public class StoreDB: DbContext
    {
    public DbSet<Product> products { get; set; }
    public DbSet<Order> orders { get; set; }
    public DbSet<Order_Line> order_lines { get; set; }

    }

以防万一你也需要订单类:

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

    public class Order
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Order_Number { get; set; }
    public DateTime Order_Date { get; set; }
    public virtual ICollection <Order_Line> Order_Lines { get; set; } 

    public Order()
    {

    }

}

以下是详细错误,以防万一。

  

'StoreDB':在using语句中使用的类型必须可以隐式转换为'System.Double'

     

'StoreDB'不包含'SaveChanges'的定义,并且没有扩展方法'SaveChanges'可以找到接受类型'StoreDB'的第一个参数(你是否缺少using指令或汇编引用)

1 个答案:

答案 0 :(得分:1)

您需要使用Nuget Package Manager添加对Entity Framework的引用。

首次运行解决方案时,因为DbContext没有参数,它将在MsSqlExpress数据库中创建一个新数据库。

阅读本教程以获取更多信息:http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx

我想我发现了两个问题,第一个问题是你的StoreDB中没有构造函数。

public class StoreDB : DbContext
{ 
        public StoreDB() : base() //Add a parameter to Base to specify an existing dB
        {
            Database.SetInitializer<StoreDB>(new DropCreateDatabaseIfModelChanges<StoreDB>());

        }

        public DbSet<Product> products { get; set; }
        public DbSet<Order> orders { get; set; }
        public DbSet<Order_Line> order_lines { get; set; }
}

第二个问题是using (var db = new Models.StoreDB())没有实现IDisplosable。您应该这样做(仅使用StoreDB上的using而不是Models.StoreDB()):

using (var ctx = new StoreDB())
{
    var p = new Product() { Product_Code = "SOFT549",Product_Name = "Book" };
    ctx.Products.Add(p);
    ctx.SaveChanges();
}