此版本的SQL Server不支持没有聚簇索引的表

Sam*_*ath 21 azure c#-4.0 entity-framework-4.1 asp.net-mvc-3 azure-sql-database

我正在使用SQL Server数据库处理vs 2010和EF 4.1.下面提到的代码适用于本地SQL Server DB.(SQL 2008).

但是,当我发布Windows AZURE云SQL Azure的MVC应用程序时,它给出了下面提到的错误.

  1. 为什么此错误仅返回SQL Azure(使用桌面SQL Server 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();
}
Run Code Online (Sandbox Code Playgroud)

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."}
Run Code Online (Sandbox Code Playgroud)

InnerException如下所示:

{"Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again."}
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

cil*_*arl 38

您需要在SQL Azure中要为其添加行的所有表上创建聚簇索引; 否则insert语句总是失败.

CREATE UNIQUE CLUSTERED INDEX Idx_TableName ON TableName(yourGUIDColumn);

以下是有关这些索引的一般准则和限制的参考:MSDN链接

这是另一篇解释其背后原因的文章:链接

  • 谢谢.当我创建一个主键时.它工作.ALTER TABLE [dbo].[RetailSaleReturns]添加PRIMARY KEY([Id]) (4认同)
  • 另外,要记住一件事,你不能在没有索引的表上删除索引. (2认同)