1

ローカルのASP.NETMVC3 Windows Azureプロジェクトがあり、エミュレーターにMSSQLExpressのローカルインスタンスを使用しています。

私のweb.configには、次の接続文字列があります。

<add name="ExampleDb" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=ExampleDb;User Instance=true;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

デバッグの目的で、WebRole.csファイルに次のものがあります。

public override bool OnStart() 
{
    ExampleDb context = new ExampleDb();
    context.ExampleItemEntries.Add(new ExampleItem() { ExampleItemId = 1, Att1 = "1", Att2 = "2" });
    context.SaveChanges();     
    return base.OnStart();
}

このアクションを実行すると、コードで最初に生成されたデータベース(Entity Frameworkを使用)のコンテンツを実際に確認できます。データベース:ExampleDb、テーブル:ExampleItem。

ただし、 ExampleController でまったく同じことを行っても、データベースは更新されません。代わりに、このデータは別の場所に移動します(どこにあるかわかりません)。ブラウザ経由でコントローラにアクセスすると、データをアップロードして確認できますが、ExampleDbデータベースには保存されず、WebRole.csから送信されたデータのみがデータベースに保存されます。

この動作を引き起こしているアイデアはありますか?

ExampleDb.csは次のようになります。

public class ExampleDb : DbContext
{
    public ExampleDb() : base("ExampleDb") { }
    public DbSet<ExampleItem> ExampleItemEntries { get; set; }     
}
4

2 に答える 2

2

接続文字列には「UserInstance=True」が含まれています。これは、SQLEXPRESSがユーザーインスタンスを使用してデータを保存することを意味します。これは、新しいデータベースのセットを含むSQLServerのまったく異なるインスタンスです。

WebRole.csのコードは、ExampleControllerのコードとは異なるユーザーアカウントで実行されていると思います。ExampleControllerが管理者ではないユーザーアカウントで実行される場合、ユーザーインスタンスが使用されます...

したがって、接続文字列から「User Instance = True」を削除し、SQLEXPRESSデータベースインスタンスに適切なアクセス権を割り当てると、問題が解決します。

于 2012-06-07T16:06:55.643 に答える
0

CodeFirstモデルでは、最初にweb.configで接続文字列を次のように定義する必要があります。

<connectionStrings>
 <add name="ExampleDbConnection"
      connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
                   database=ExampleDb;
                   AttachDBFilename=|YouDataDirectory|yourdb.mdf;
                   User Instance=true"
       providerName="System.Data.SqlClient" />
<connectionStrings/>

DbContextクラスのコンストラクターは、web.configで接続文字列名を指定する名前と値のペアを受け入れます。したがって、コンテキストでこの接続文字列を参照できます。

class ExampleDb : DbContext
{
  public ExampleDb() : base("name=ExampleDbConnection") { }
  ...
}

このコードはASP.NETMVCWebロールで正常に機能するため、上記のように試すことができます。

于 2012-06-08T02:24:34.450 に答える