Tables without a clustered index are not supported

2020-05-30 09:01发布

I am working on vs 2010 and EF 4.1 with SQL server database. Below mentioned code works fine with local SQL server DB.(SQL 2008).

But when I published the MVC application for windows AZURE cloud and SQL Azure it's giving below mentioned error.

  1. Why this error is only return SQL Azure (working with desktop SQL server 2008)?
  2. How to get rid of this ?

My repository code sample as below.Below mentioned error comes when calling Catalog.SaveChanges() method.

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 is Like below :

{"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 is Like below :

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

StackTrace is Like below

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)

2条回答
家丑人穷心不美
2楼-- · 2020-05-30 09:19

I found it easier to upgrade to v12.

I had to BACKUP (coz I'm smart like that!), then upgrade all my DB's (using the old console manage.windowszaure.com) from Web to Basic tier. Then follow instructions here to upgrade (https://azure.microsoft.com/en-us/documentation/articles/sql-database-v12-upgrade/)

Simply put:

  • Open portal.azure.com
  • Select Sqlserver
  • Operations
  • Latest SQL Database update

To monitor progress using azure powershell:

Add-AzureAccount
Switch-AzureMode -Name AzureResourceManager
Get-AzureSqlServer -ServerName '<<yoursqlservername>>' -ResourceGroupName '<<sqlserverresourcegroupname>>'
查看更多
做个烂人
3楼-- · 2020-05-30 09:25

You need to create a clustered index on all tables in SQL Azure that you wish to add rows to; otherwise the insert statement always fails.

CREATE UNIQUE CLUSTERED INDEX Idx_TableName ON TableName(yourGUIDColumn);

Here is a reference to the general guidelines and limitations specifically regarding these indexes: MSDN Link

Here is another article which explains the reasoning behind this: link

查看更多
登录 后发表回答