2017-10-09 8 views
1

私はコースの一部として練習を与えられました。データベースやモデルを持たないASP.NET MVCアプリケーションを作成することでしたコードを使用して1つを生成します。あるセクションでは、以下に示すコードがいくつかあります。 私は既に| IDisposableをクラスに追加しようとしましたが、それでも上記のエラーが発生しました。クラスタイプがIDisposableに変換されず、.SaveChangesメソッドが存在しません

.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() 
    { 

    } 

} 

そして、これは私が言われると仮定空白DbContextから継承StoreDBクラスで、あまりにも後で何かを追加するが、シート上で私は与えられたコードは、この状態では間違いなくコンパイルする必要がありますコードを実行するように頼まれた。

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ステートメントで使用されるタイプは、「StoreDBが」「のSaveChanges」となし拡張メソッド「のSaveChanges」受け入れるための定義が含まれていない「System.Double」

に暗黙的に変換可能でなければなりません型「StoreDB」の最初の引数が見つかりませんでしたあなたはNugetパッケージマネージャを使用してEntity Frameworkへの参照を追加する必要があります

+3

ていますか? – Igor

+1

http://idownvotedbecau.se/imageofanexception/ –

+0

@Igorこれは私がこのソリューションの下で作成した唯一のプロジェクトであり、見ることのできるクラスは他のクラスを除くすべてのコードとそれらはすべて同じ名前空間に従っていることがわかります。 – Aelux

答えて

1

(あなたがusingディレクティブまたはアセンブリ参照が不足しています)。

DbContextにはパラメータがないため、最初にソリューションを実行すると、MsSqlExpressデータベースに新しいデータベースが作成されます。詳細は、このチュートリアルを通して

ゴーは:http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx


私が最初にあなたのStoreDBでコンストラクタを持っていけないということです、私は2つの問題を発見したと思います。

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

第2の問題は、using (var db = new Models.StoreDB())がIDisplosableを実装していないことです。あなたはこのようにそれをやるべきこと(だけでなく周りのStoreDBでusingを使用してModels.StoreDB()):あなたは異なる名前空間に位置 `StoreDB`という名前の複数のクラスを持っていないことを確認し

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

私はNugetのパッケージマネージャーをチェックしましたが、このプロジェクトには確実にインストールされています。とにかくそれをやったと確信していましたが、確かに私はダブルチェックしました。 私はあなたが私を今までのポイントに送ったチュートリアルに従っていました。私は、コードを使用している文の外でプロダクトpを作成したという事実を除いて、それを中括弧で囲みます。 – Aelux

+0

usingステートメント内でpの作成を続けると、同じ2つのエラーが発生し、StoreDBにコンストラクタを追加すると、次のエラーが表示されます。 'ジェネリック型またはメソッドの型パラメータ 'TContext'として使用できません'Database.SetInitializer (IDatabaseInitializer )'。 'System.Data.Entity.DbContext'からの暗黙的な参照変換はありません。 ' 'ジェネリック型またはメソッドでは、型パラメータ' TContext 'として型を使用できません。暗黙的な参照変換は 'System.Data.Entity.DbContext'にありません。 – Aelux

+0

チュートリアルに従い、2つのプロジェクトを比較します。 –

関連する問題