1

コードファーストのアプローチを使用してデータベースを作成しようとしています。次のコードを実行すると、次の例外が発生します。どうすればこれを克服できますか?

ノート:

  • システムに SQL Server 2008 R2 があります。
  • 私は設定ファイルを使用していません。規則を使用してデータベースを作成すると想定しました
  • まだ開いている接続はありません。システムを再起動してテストしました。それでも同じ問題です。
  • EntityFramework.dllのランタイム バージョンはv4.0.3xxxです。

例外:

プロバイダーは ProviderManifestToken 文字列を返しませんでした

メッセージ:

この操作には、'master' データベースへの接続が必要です。元のデータベース接続が開かれており、資格情報が接続文字列から削除されているため、'master' データベースへの接続を作成できません。開かれていない接続を提供します。

内部例外:

SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした)

コード:

using System.Data.Entity;
namespace LijosEF
{
  public class Dinner
  {
      public int DinnerID { get; set; }
      public int Title { get; set; }
  }

  public class RSVP
  {
    public int RSVPID { get; set; }
    public int DinnerID { get; set; }

    public virtual Dinner Dinner { get; set; }
  }

  //System.Data.Entity.DbContext is from EntityFramework.dll
  public class NerdDinners : System.Data.Entity.DbContext
  {
    public DbSet<Dinner> Dinners { get; set; }
    public DbSet<RSVP> RSVPs { get; set; }
  }
}

namespace LijosEF
{
class Program
{
    static void Main(string[] args)
    {
        using (var db = new NerdDinners())
        {
            var product = new Dinner { DinnerID = 1, Title = 101 };
            db.Dinners.Add(product);
            int recordsAffected = db.SaveChanges();
        }

    }
}
}
4

3 に答える 3

5

接続情報なし。EFは、SQLServerではなくSQLExpressでデータベースを作成しようとします。SQL Serverで作成する場合は、接続文字列を指定する必要があります。

于 2012-07-20T13:43:13.393 に答える
2

何をしているかを解決して知る最も簡単な方法は、次のように app.config に Connectionstring を追加することです。

<connectionStrings>
    <clear/>
    <add name="NerdDinners"
          providerName="System.Data.SqlClient"
          connectionString="Server=.;Database=NerdDinners;Integrated Security=True;"/>
  </connectionStrings>
于 2012-07-20T14:05:59.420 に答える
2
public class NerdDinners : System.Data.Entity.DbContext
{
    public DbSet<Dinner> Dinners { get; set; }
    public DbSet<RSVP> RSVPs { get; set; }
}

これをに変更

public class NerdDinners : System.Data.Entity.DbContext
{
    public NerdDinners(string connString):base(connString)
    {}
    public DbSet<Dinner> Dinners { get; set; }
    public DbSet<RSVP> RSVPs { get; set; }
}
于 2012-07-20T13:45:18.867 に答える