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?
EntityTypeConfiguration _vApplicationKey = oDataModelBuilder.EntityType () _vApplicationKey.HasKey (a => a.ApplicationId); –
moudrick