21

nicht unterstützt. Ich arbeite an vs 2010 und EF 4.1 mit SQL Server-Datenbank. Der unten erwähnte Code funktioniert gut mit der lokalen SQL-Server-DB (SQL 2008).Tabellen ohne Clustered-Index werden in dieser Version von SQL Server

Aber wenn ich veröffentlichte die MVC-Anwendung für Windows Azure Cloud und SQL Azure es unten genannten Fehler ist zu geben.

  1. Warum dieser Fehler return nur SQL Azure (mit Desktop-SQL-Server 2008 in Betrieb)?
  2. Wie man das los wird?

Mein Repository Codebeispiel als below.Below Fehler erwähnt kommt, wenn Catalog.SaveChanges() aufrufen Methode.

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 unter Like:

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

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

Stacktrace ist wie unten

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) 

Antwort

38

Sie müssen einen Clustered-Index für alle Tabellen in SQL Azure erstellen, dem Sie Zeilen hinzufügen möchten. Andernfalls schlägt die INSERT-Anweisung immer fehl.

CREATE UNIQUE CLUSTERED INDEX Idx_TableName ON TableName(yourGUIDColumn);

Hier ist ein Verweis auf die allgemeinen Richtlinien und Einschränkungen dieser Indizes speziell in Bezug auf: MSDN Link

Hier ist ein weiterer Artikel, der die Gründe für diese erklärt: link

+4

Thanks.When ich eine primäre key.Its Arbeit erstellen. ALTER TABLE [dbo]. [RetailSaleReturns] HINZUFÜGEN PRIMÄRSCHLÜSSEL ([Id]) – Sampath

+2

Auch eine Sache zu beachten, können Sie einen Index auf einen Tisch nicht verlassen, keine Indizes zu verlassen. –

4

Ich fand es einfacher, Upgrade auf V12

Ich musste BACKUP (coz ich bin so schlau!), Dann alle meine DBs (mit der alten Konsole manage.windowszaure.com) von Web zu Basic Tier. Dann folgen Sie die Anweisungen hier zu aktualisieren (https://azure.microsoft.com/en-us/documentation/articles/sql-database-v12-upgrade/)

Einfach gesagt:

  • öffnen zu.com
  • Select Sqlserver
  • Operationen
  • neueste SQL-Datenbankaktualisierung

Fortschritt azurPower mit überwachen:

Add-AzureAccount 
Switch-AzureMode -Name AzureResourceManager 
Get-AzureSqlServer -ServerName '<<yoursqlservername>>' -ResourceGroupName '<<sqlserverresourcegroupname>>' 
Verwandte Themen