2014-04-18 3 views
5

Ich verwende MVC 5, Microsoft OData 2.1 und Entity Framework 6. Ich versuche, einen OData-Feed zu konsumieren, den ich mit der EntitySetController-Klasse geschrieben habe. wenn ich den Dienstverweis hinzufügen und verbraucht die OData Metadaten, kann es meine Ressource sehen, aber wenn ich versuche, es mir einen Fehler zu speichern:Wie füge ich einen OData-Schlüsselwert zu meiner Entity Framework-Klasse hinzu?

The custom tool 'DataServicesCoreClientGenerator' failed. Data service client code-generation failed: Schema specified is not valid. Errors: (0,0) : error 0159: Entity '...' has no key defined. Define the key for this EntityType..#

Meine OData Metadaten wie folgt aussehen:

<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0"> 
    <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0"> 
     <Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="WcfResearch.Entities"> 
     <EntityType Name="vApplication"> 
      <Property Name="ApplicationName" Type="Edm.String"/> 
      <Property Name="LoweredApplicationName" Type="Edm.String"/> 
      <Property Name="ApplicationId" Type="Edm.Guid" Nullable="false"/> 
      <Property Name="Description" Type="Edm.String"/> 
     </EntityType> 
     </Schema> 
     <Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="Default"> 
      <EntityContainer Name="Container" m:IsDefaultEntityContainer="true"> 
       <EntitySet Name="Applications" EntityType="WcfResearch.Entities.vApplication"/> 
      </EntityContainer> 
     </Schema> 
    </edmx:DataServices> 
</edmx:Edmx> 

ich habe versucht, das [Key] Attribut auf die vApplication Klasse mit dem folgenden Code hinzuzufügen:

[MetadataType(typeof(vApplicationKey))] 
public partial class vApplication 
{ 
} 

public class vApplicationKey 
{ 
    [Key] 
    public System.Guid ApplicationId { get; set; } 
} 

Aber das meine Metadaten nicht ändert und der Fehler bestehen bleibt. Der Entitätsschlüssel im EDMX-Modell ist auf ApplicationId festgelegt. Das scheint auch die Metadaten nicht zu beeinflussen. Wie bekomme ich die Metadaten zum Generieren eines Schemas mit einem Entitätsschlüssel, sodass ich es in C# mit einer Servicereferenz verwenden kann?

P.S. Ich verzehre eine Aussicht. Es scheint zu funktionieren, wenn ich direkt einen Tisch verzehre. Wie kann ich das mit Views machen?

Antwort

13

Sie verwenden ODataModelBuilder, um das Modell zu erstellen, oder? Wenn ja, versuchen Sie Folgendes:

EntityType _vApplicationKey=oDataModelBuilder.Entity<vApplicationKey>() 
_vApplicationKey.HasKey(a => a.ApplicationId); 
+0

EntityTypeConfiguration _vApplicationKey = oDataModelBuilder.EntityType () _vApplicationKey.HasKey (a => a.ApplicationId); – moudrick

0

könnten Sie bitte versuchen, dies zu tun:

public class vApplicationKey 
{ 
    public vApplicationKey 
    { 
    ApplicationId = System.Guid.NewGuid(); 
    } 

[Key] 
public System.Guid ApplicationId { get; set; } 

} 

einen neuen Guid im Konstruktor initialisieren.

+0

Die Klasse ist automatisch generierter Entity Framework-Code. Ich habe versucht, es zu erweitern, um den Schlüssel der Eigenschaft hinzuzufügen, aber das hat nicht funktioniert. – Steve