21

私はvs 2010とEF 4.1SQLサーバーデータベースに取り組んでいます。以下のコードは、ローカル SQL サーバー DB で正常に動作します (SQL 2008)。

しかし、Windows AZURE クラウドおよびSQL Azure用の MVC アプリケーションを公開すると、以下のエラーが発生します。

  1. このエラーがSQL Azure (デスクトップ SQL サーバー 2008 での作業)のみを返すのはなぜですか?
  2. これを取り除く方法は?

以下のような私のリポジトリコードサンプル.Catalog.SaveChanges ()メソッドを呼び出すと、以下のエラーが発生します。

using (var catalog = new DataCatalog())
{
    var retailSaleReturn = new RetailSaleReturn
    {
        ReturnQuantity = returnQuantity,
        Product = saleDetailObj.Product,
        Owner = owner,
        Provider = provider,
    };

    //add to context
    Catalog.RetailSaleReturns.Add(retailSaleReturn);

    //save for db
    Catalog.SaveChanges();
}

DbUpdateExceptionは以下のようになります:

{"An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details."}

InnerExceptionは以下のようになります:

{"Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again."}

StackTraceは以下のようなものです

at System.Data.Entity.Internal.InternalContext.SaveChanges()
   at PawLoyalty.Data.Repositories.CustomersRepository.ReturnRetailOnlySales(Guid saleDetailId, Int32 returnQuantity, String providerKey, String ownerKey) in D:\PawLoyalty Module\PawLoyalty\PawLoyalty\PawLoyalty.Data\Repositories\CustomersRepository.cs:line 550
   at PawLoyalty.Web.Areas.Providers.Controllers.CustomersController.ReturnRetailOnlySales(String providerKey, String ownerKey, String petKey, Guid saleDetailId, Int32 returnQuantity) in D:\PawLoyalty Module\PawLoyalty\PawLoyalty\PawLoyalty.Web\Areas\Providers\Controllers\CustomersController.cs:line 942
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
4

2 に答える 2

38

行を追加するSQLAzureのすべてのテーブルにクラスター化インデックスを作成する必要があります。そうしないと、挿入ステートメントは常に失敗します。

CREATE UNIQUE CLUSTERED INDEX Idx_TableName ON TableName(yourGUIDColumn);

これらのインデックスに関する一般的なガイドラインと制限事項への参照は次のとおりです。MSDNリンク

これは、この背後にある理由を説明する別の記事です:リンク

于 2012-11-21T11:25:25.890 に答える
4

v12 にアップグレードする方が簡単であることがわかりました。

私は BACKUP しなければなりませんでした (私はそのように頭が良いので!)、次にすべての DB を (古いコンソール manage.windowszaure.com を使用して) Web から Basic 層にアップグレードしなければなりませんでした。次に、こちらの手順に従ってアップグレードします ( https://azure.microsoft.com/en-us/documentation/articles/sql-database-v12-upgrade/ ) 。

簡単に言えば:

  • portal.azure.com を開く
  • Sqlserver を選択
  • オペレーション
  • 最新の SQL データベースの更新

Azure PowerShell を使用して進行状況を監視するには:

Add-AzureAccount
Switch-AzureMode -Name AzureResourceManager
Get-AzureSqlServer -ServerName '<<yoursqlservername>>' -ResourceGroupName '<<sqlserverresourcegroupname>>'
于 2015-07-03T06:22:41.880 に答える