21

我正在使用SQL Server 数据库开发vs 2010 和 EF 4.1。下面提到的代码适用于本地 SQL 服务器 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();
}

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

您需要在SQL Azure中要添加行的所有表上创建聚集索引;否则插入语句总是失败。

CREATE UNIQUE CLUSTERED INDEX Idx_TableName ON TableName(yourGUIDColumn);

以下是针对这些索引的一般准则和限制的参考:MSDN Link

这是另一篇文章,解释了这背后的原因:link

于 2012-11-21T11:25:25.890 回答
4

我发现升级到 v12 更容易。

我必须备份(因为我很聪明!),然后将我所有的数据库(使用旧的控制台 manage.windowszaure.com)从 Web 升级到基本层。然后按照此处的说明进行升级(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 回答