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>>' 
相关问题