2

非常に単純なコードの最初の例をローカル SQL から Azure SQL に移行しようとしていますが、レンガの壁にぶつかったようです。

これは私が使用している簡単なコードです:

public class Cat
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ID { get; set; }
    public string Name { get; set; }
}

**Context class:**

public class CatDbContext : DbContext
{
    public PersonDbContext()
        : base("name=MyConnectionString")
    { }
    public DbSet<Cat> Cats { get; set; }
}

My connection string:
 <add name="MyConnectionString" connectionString="Server=tcp:xxxx.database.windows.net;Database=xxxx;User ID=xxxx@xxxx;Password=xxxx;Trusted_Connection=False;Encrypt=True;" providerName="System.Data.SqlClient" />

これで、次のことを行う単純なコンソール アプリができました。

        CatDbContext db = new CatDbContext();
        db.Cats.Add(new Cat { Name = "Garfield", ID = Guid.NewGuid() });
        db.SaveChanges();

そして、行 db.SaveChanges(); で例外が発生しています。発言: 無効なオブジェクト名 'dbo.Cats'。

スタックトレース:

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)

また、テーブルは作成されません。なぜこれが起こっているのか見当がつかないので、誰かが私を正しい方向に向けることができれば、私は非常に感謝しています.

よろしく、オードリウス。

4

5 に答える 5

3

私は今日、EF Code First Migrations を使用してこれを行いました。最初にテーブルを作成し、将来の DB アップグレードも可能にします。詳細については、このチュートリアルを参照してください。おすすめの方法だと思います。パッケージ マネージャーで NullReferenceException が発生した場合は、こちらを参照してください

別のヒント(一番下までスクロール) は、接続文字列が SQL Azure マスター データベースをターゲットにする必要があることですが、この情報は古くなっている可能性があり、私は試していません。

于 2012-07-13T09:09:49.540 に答える
0

私は同じ問題を抱えていました.DB初期化子を設定することが、最終的にテーブルを作成する解決策でした.
に以下を入れるだけですGlobal.asax.cs

Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>());
于 2013-05-11T16:07:59.530 に答える
0

接続文字列を設定PersistSecurityInfo=trueすると、Azure でデータベースを作成するためのアクセス許可がローカル マシンに付与されます。データベースを作成したら、必ず削除してください。

于 2013-03-07T08:25:11.013 に答える
0

Entity Framework はコード ファースト アプローチで Azure SQL テーブルを作成しないようです。したがって、モデル ファースト アプローチを使用し、データ モデルの SQL スクリプトを生成し、利用可能な Web ベースの SQL マネージャーでスクリプトを実行する必要があります。アズールで。

交換もおすすめ

[id] uniqueidentifier not null,

[id] uniqueidentifier not null default newid(),

データベースで生成されたキーは他の方法では機能しないため、すべての主キーに対して。

于 2012-07-08T20:51:25.020 に答える
0

CodeFirst は SQL Azure とうまく連携します。

これは以前は EF 4.1 の問題でした (-) EF の最新バージョン (今日の NuGet では 4.3.1) を使用していることを確認してください。また、接続文字列で指定しているユーザーが、ターゲット データベースにデータベース オブジェクトを作成するための十分な権限を持っていることを確認してください。

于 2012-07-09T09:16:22.107 に答える