21

我正在對vs 2010和EF 4.1SQL服務器數據庫。 下面提到的代碼適用於本地SQL服務器數據庫(SQL 2008)。此版本的SQL Server不支持沒有聚簇索引的表

但是,當我發表了Windows Azure雲SQL Azure的它給下文提到的錯誤 MVC應用。

  1. 爲什麼這個錯誤是只返回SQL Azure的(與桌面SQL Server 2008中工作)?
  2. 如何擺脫這個?

我的庫代碼示例如below.Below提到的錯誤呼叫 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."} 

堆棧跟蹤是像下面

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) 

回答

38

您需要在SQL Azure中的所有表上創建聚簇索引,以便添加行;否則插入語句總是失敗。

CREATE UNIQUE CLUSTERED INDEX Idx_TableName ON TableName(yourGUIDColumn);

這裏是專門針對這些指標的一般準則和限制的引用:MSDN Link

這裏是另一篇文章這也解釋了這背後的原因:link

+4

Thanks.When創建工作一個主key.Its。 ALTER TABLE [dbo]。[RetailSaleReturns] ADD PRIMARY KEY([Id]) – Sampath

+2

此外,有一點需要牢記,不能在表中留下索引而不留下索引。 –

4

我發現它更容易升級到v12。

我必須備份(因爲我很聰明!),然後從Web到基本層將我所有的數據庫(使用舊控制檯manage.windowszaure.com)升級。然後按照指示進行升級(https://azure.microsoft.com/en-us/documentation/articles/sql-database-v12-upgrade/

簡單地說:

  • 打開portal.azure。COM
  • 選擇sqlserver的
  • 操作
  • 最新的SQL數據庫更新

要使用PowerShell的湛藍監測進展情況:

Add-AzureAccount 
Switch-AzureMode -Name AzureResourceManager 
Get-AzureSqlServer -ServerName '<<yoursqlservername>>' -ResourceGroupName '<<sqlserverresourcegroupname>>' 
相關問題