4

私はEFコードファーストCTP5についてscottguのブログの例に従いましたが、エラーが発生しました

System.Data.SqlClient.SqlException: 無効なオブジェクト名 'dbo.Products'。

これは私が得たコードです。

<add name="CTP5Context"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|EFCTP5.mdf;User Instance=true"
     providerName="System.Data.SqlClient" />


public class CTP5Context : DbContext 
{
    public DbSet<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public int Amount { get; set; }
}



var context = new CTP5Context();
        var products = context.Products;            

        return View(products);

私はここでちょっと無知です私はブログ投稿と同じことをしました.EFで初めてではありません(しかしCTP5 tho),私は何かを見落としていますか?

4

5 に答える 5

7

データベースでテーブル名が Product の場合は、これを試してください。

[Table("Product", SchemaName = "dbo")]
public class Product
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public int Amount { get; set; }
}

属性を使用するTableには、次の using ステートメントを追加する必要があります。

using System.ComponentModel.DataAnnotations;

お役に立てれば!それは私のために働いた。

于 2011-01-29T19:56:58.747 に答える
5

私は同じ問題を抱えていましたが、2つの変更を行ったのでうまくいきました。接続文字列を変更しました (初期カタログを追加)

<add name="CTP5Context"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\northwind.mdf;User Instance=true;initial catalog=Northwind"
     providerName="System.Data.SqlClient" />

Global.asax で、次の行を Application_Start() に追加しました

Database.SetInitializer<Northwind>(new System.Data.Entity.DropCreateDatabaseAlways<Northwind>());
于 2011-05-09T02:50:15.487 に答える
3

接続しているデータベースの種類によって、EF Code First の動作が異なるようです。ScottGu が EF Code First を紹介するために使用している SQLCE を使用する場合、すべてのテーブルは複数形ではない名前で作成されます。ただし、SQL Server 2008 (私がテストしたもの) を使用している場合、テーブル名は複数形であると想定されていました。これを回避する方法はいくつかあります。Omar が示すようにテーブル名属性を追加するか、コンテキストの OnModelCreating イベントをオーバーライドすることができます。

 protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
 }
于 2011-08-25T16:12:28.130 に答える
3

例外は、データベースからのもののようです。テーブル名は「Products」ですか、それとも「Product」ですか (複数形ではなく単数形ですか?)

于 2011-01-18T18:16:44.997 に答える
1

Productsテーブルがdboスキーマで作成されていることを確認してください。多くの場合、スキーマはユーザー名やサーバー名など、dbo以外のものになります (使用しているアカウントがdb_ownerスキーマにない場合) 。 . Visual Studio のサーバー エクスプローラーで DB を開きます (SQLExpress であるため)。

これを行うには、テーブル名を右クリックして [テーブル定義を開く] を選択し、テーブル定義内で右クリックして [プロパティ] を選択し、プロパティ ウィンドウでスキーマ値にリストされている内容を確認します。DBO でない場合は、dbo に変更して保存できるはずです。

于 2011-01-23T01:13:45.933 に答える