2014-04-18 5 views
5

मैं एमवीसी 5, माइक्रोसॉफ्ट ओडाटा 2.1 और एंटिटी फ्रेमवर्क 6 का उपयोग कर रहा हूं। मैं एंटिटीसेट कंट्रोलर क्लास का उपयोग करके एक ओडाटा फीड का उपभोग करने की कोशिश कर रहा हूं। जब मैं सेवा संदर्भ जोड़ने और इसे OData मेटाडाटा की खपत है, यह मेरी संसाधन देख सकते हैं, लेकिन जब मैं यह बचाने की कोशिश मैं एक त्रुटि मिलती है:मैं अपनी इकाई फ्रेमवर्क कक्षा में ओडाटा कुंजी मान कैसे जोड़ूं?

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..#

मेरे OData मेटाडाटा इस तरह दिखता है:

<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> 

मैं निम्नलिखित कोड के साथ vApplication वर्ग के लिए [कुंजी] विशेषता जोड़ने की कोशिश की:

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

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

लेकिन है कि मेरी मेटाडाटा परिवर्तन नहीं करता है और समस्या बनी रहती है। ईडीएमएक्स मॉडल में इकाई कुंजी एप्लिकेशन आईडी पर सेट है। यह मेटाडेटा को भी प्रभावित नहीं करता है। मैं एक इकाई कुंजी के साथ स्कीमा उत्पन्न करने के लिए मेटाडेटा कैसे प्राप्त करूं ताकि मैं इसे सेवा संदर्भ के साथ सी # में उपभोग कर सकूं?

पीएस मैं एक विचार खा रहा हूँ। ऐसा लगता है जब मैं सीधे एक टेबल का उपभोग करता हूं। तो मैं इसे दृश्यों के साथ काम करने के लिए कैसे प्राप्त करूं?

उत्तर

13

आप मॉडल बनाने के लिए ओडाटामोडेलबिल्डर का उपयोग कर रहे हैं, है ना? यदि हां, तो कृपया इसे आजमाएं:

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

EntityType कॉन्फ़िगरेशन _vAplicationKey = oDataModelBuilder.EntityType () _vAplicationKey.HasKey (a => a.AplicationId); – moudrick

0

आप ऐसा करने की कोशिश करें सकता है:

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

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

} 

निर्माता में एक नया Guid Initialise।

+0

कक्षा स्वत: जेनरेट की गई इकाई फ्रेमवर्क कोड है। मैंने संपत्ति को कुंजी जोड़ने के लिए इसे विस्तारित करने का प्रयास किया लेकिन यह काम नहीं किया। – Steve

संबंधित मुद्दे