2014-09-16 11 views
8

का उपयोग कर इकाइयों का पर्दाफाश नहीं कर सकता मैं .NET फ्रेमवर्क 4.5.1 और ईएफ 6.1 के साथ डब्ल्यूसीएफ डेटा सेवा (ओडाटा) का उपयोग कर रहा हूं। मैंने ईएफ मॉडल बनाने के लिए कोड का पहला दृष्टिकोण इस्तेमाल किया है। मैं WCF OData सेवा (WcfDataService1.svc) को यह एफई मॉडल (AddProjectModel.cs) को संदर्भित करता है, यह निम्नलिखित थ्रो त्रुटि:डब्ल्यूसीएफ ओडाटा सेवा और ईएफ 6 अंक - ओडाटा सेवा

त्रुटि:

सर्वर अनुरोध संसाधित करते समय एक त्रुटि आई। अपवाद संदेश 'डेटा संदर्भ प्रकार' AddProjectModel 'पर है, एक शीर्ष IQueryable गुण' संपत्ति 'है जिसका तत्व प्रकार एक इकाई प्रकार नहीं है। सुनिश्चित करें कि IQueryable गुण इकाई प्रकार का है या इस संदर्भ को अनदेखा करने के लिए डेटा संदर्भ प्रकार पर IgnoreProperties विशेषता निर्दिष्ट करें। ' अधिक जानकारी के लिए सर्वर लॉग देखें। अपवाद स्टैक ट्रेस है:

System.Data.Services.DataService पर System.Data.Services.Providers.BaseServiceProvider.LoadMetadata (बूलियन skipServiceOperations) पर System.Data.Services.Providers.ReflectionServiceProvider.PopulateMetadata (ProviderMetadataCacheItem metadataCacheItem) पर

1.CreateInternalProvider(Object dataSourceInstance) at System.Data.Services.DataService 1.CreateMetadataAndQueryProviders (IDataServiceMetadataProvider & metadataProviderInstance, IDataServiceQueryProvider & queryProviderInstance, & dataSourceInstance, बूलियन & isInternallyCreatedProvider वस्तु) System.Data.Services.DataService 1.CreateProvider() at System.Data.Services.DataService 1.HandleRequest() System.Data.Services.DataService`1.ProcessRequestForMessage पर (स्ट्रीम messageBody पर) SyncInvokeProcessRequestForMessage (ऑब्जेक्ट, ऑब्जेक्ट [], ऑब्जेक्ट पर []) System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (ऑब्जेक्ट इंस्टेंस, ऑब्जेक्ट [] इनपुट, ऑब्जेक्ट [] & आउटपुट) System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & आरपीसी) System.ServiceModel.Dispatcher पर। ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc & RPC) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 पर (MessageRpc & RPC) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 पर (MessageRpc & RPC) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 पर (MessageRpc & आरपीसी) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & आरपीसी) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpcपर System.ServiceModel.Dispatcher.MessageRpc.Process पर System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 पर System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc & RPC) (MessageRpc & RPC) पर 680,403,210 RPC) (बूलियन isOperationContextSet)

namespace AddProjectService 
{ 
public class WcfDataService1 : DataService<AddProjectModel> 
{ 
    // This method is called only once to initialize service-wide policies. 
    public static void InitializeService(DataServiceConfiguration config) 
    { 
     // TODO: set rules to indicate which entity sets and service operations are visible, 
     updatable, etc. 
     // Examples: 
     config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
     config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 
     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; 
    } 
} 
} 

मेरे कोड पहले मॉडल WcfDataService1.svc

:

यहाँ मेरी WCF डाटा सेवा है AddProjectModel.cs

public partial class AddProjectModel : DbContext 
{ 
    public AddProjectModel() 
    : base("name=AddProjectModel") 
    { 
    } 

    public virtual DbSet<Asset> Assets { get; set; } 
    public virtual DbSet<Project> Projects { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Configurations.Add(new AssetMap()); 
    modelBuilder.Configurations.Add(new ProjectMap()); 
    }   
} 

public class AssetMap : EntityTypeConfiguration<Asset> 
{ 
    public AssetMap() 
    { 
    this.Property(a => a.AssetId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);  
    this.HasMany(a => a.Projects).WithRequired(p => p.Asset).HasForeignKey(p => p.AssetId); 

    //table & column mappings 
    this.ToTable("TBLASSET"); 
    this.Property(a => a.AssetId).HasColumnName("ASSETID"); 
    this.Property(a => a.AssetLevelId).HasColumnName("ASSETLEVELID"); 
    this.Property(a => a.AssetNumber).HasColumnName("ASSETNUMBER"); 
    this.Property(a => a.Name).HasColumnName("NAME"); 
    this.Property(a => a.AssetTypeId).HasColumnName("ASSETTYPEID");  
} 
} 

public class ProjectMap : EntityTypeConfiguration<Project> 
{ 
    public ProjectMap() 
    { 
    this.Property(p => p.ProjectId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
    this.HasMany(p => p.SchedulePhases).WithRequired(sp => sp.Project).HasForeignKey(sp => 
    sp.ProjectId); 

    //table & column mappings 
    this.ToTable("TBLPROJECT"); 
    this.Property(p => p.ProjectId).HasColumnName("PROJECTID"); 
    this.Property(p => p.AssetId).HasColumnName("ASSETID"); 
    this.Property(p => p.CapitalCategoryId).HasColumnName("CAPITALCATEGORYID"); 
    this.Property(p => p.Comments).HasColumnName("COMMENTS"); 
    this.Property(p => p.DesignationId).HasColumnName("DESIGNATIONID"); 
    this.Property(p => p.DispositionId).HasColumnName("DISPOSITIONID"); 
    this.Property(p => p.FMSNumber).HasColumnName("FMSNUMBER"); 
    this.Property(p => p.FundingSourceId).HasColumnName("FUNDINGSOURCEID"); 
    this.Property(p => p.ImplementerId).HasColumnName("IMPLEMENTERID"); 
    this.Property(p => p.IsApproved).HasColumnName("ISAPPROVED"); 
    this.Property(p => p.IsDeferred).HasColumnName("ISDEFERRED"); 
    this.Property(p => p.IsLongTermLease).HasColumnName("ISLONGTERMLEASE"); 
    this.Property(p => p.IsRollover).HasColumnName("ISROLLOVER"); 
    this.Property(p => p.IsSidewalkBridge).HasColumnName("ISSIDEWALKBRIDGE"); 
    this.Property(p => p.JobDescription).HasColumnName("JOBDESCRIPTION"); 
    this.Property(p => p.JobType).HasColumnName("JOBTYPE"); 
    this.Property(p => p.OrganizationId).HasColumnName("ORGANIZATIONID"); 
    this.Property(p => p.ProgramCategoryId).HasColumnName("PROGRAMCATEGORYID"); 
    this.Property(p => p.DsfId).HasColumnName("DSFID"); 
    this.Property(p => p.StatusId).HasColumnName("STATUSID"); 

    this.Map<DomainObjectModel.ObjectModel.Project.ProjectCIP>(m => m.Requires("PROJECTTYPEID").HasValue(15)) 
     .Map<DomainObjectModel.ObjectModel.Project.ProjectCapacity>(m => m.Requires("PROJECTTYPEID").HasValue(2)); 
} 
} 

एसेट वर्ग:

public class Asset 
{ 
public Asset() 
{ 
    Projects = new HashSet<Project>();  
} 

[Key] 
public decimal AssetId { get; set; } 

[StringLength(20)] 
public string AssetNumber { get; set; } 

[StringLength(100)] 
public string Name { get; set; } 

public decimal? AssetLevelId { get; set; } 

public decimal? AssetTypeId { get; set; } 

public virtual ICollection<Project> Projects { get; set; }  
} 

परियोजना वर्ग:

public class Project 
{ 
public Project() 
{  
} 

[Key] 
public decimal ProjectId { get; set; } 

public decimal AssetId { get; set; } 

public decimal CapitalCategoryId { get; set; } 

//public decimal ProjectTypeId { get; set; } 

public decimal ProgramCategoryId { get; set; } 

[StringLength(1024)] 
public string Comments { get; set; } 

public decimal ImplementerId { get; set; } 

public decimal StatusId { get; set; } 

public decimal DsfId { get; set; } 

[StringLength(20)] 
public string FMSNumber { get; set; } 

[StringLength(1024)] 
public string JobDescription { get; set; } 

[StringLength(2)] 
public string JobType { get; set; } 

public decimal OrganizationId { get; set; } 

[Required][StringLength(1)] 
public string IsRollover { get; set; } 

[Required][StringLength(1)] 
public string IsDeferred { get; set; } 

[Required][StringLength(1)] 
public string IsApproved { get; set; } 

[StringLength(1)] 
public string IsSidewalkBridge { get; set; } 

public decimal FundingSourceId { get; set; } 

public decimal? DesignationId { get; set; } 

public decimal? DispositionId { get; set; } 

[Required][StringLength(1)] 
public string IsLongTermLease { get; set; } 

public virtual Asset Asset { get; set; } 
} 

मैं इस समस्या को हल करने के लिए पता नहीं है। क्या आप कृपया मुझे बता सकते हैं कि मैं यहां क्या खो रहा हूं?

मैं ओरेकल डेटाबेस का उपयोग कर रहा हूं और हमने हाल ही में ओरेकल के लिए डॉटकनेक्ट के लिए डिवार्ट से लाइसेंस खरीदा है।

धन्यवाद,


हाय,

मैं की स्थापना [DataServiceKey] प्रत्येक POCO वर्गों पर प्राथमिक कुंजी के साथ विशेषता इस त्रुटि सुलझा ली है। कृपया इसे देखें: http://blog.marcgravell.com/2008/12/astoria-and-linq-to-sql-getting-started.html

अब मैं Odata सेवा के माध्यम से संस्थाओं को बेनकाब कर सकते हैं लेकिन जब मैं URL टाइप करके इकाई संग्रह तक पहुँचने का प्रयास यह त्रुटि निम्न फेंकता (पूर्व .../WcfDataService1.svc/आस्तियों।):

त्रुटि:

<?xml version="1.0" encoding="utf-8" ?> 
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <m:code /> 
    <m:message xml:lang="en-US">An error occurred while processing this request.</m:message> 
    <m:innererror> 
    <m:message>Operation could destabilize the runtime.</m:message> 
    <m:type>System.Security.VerificationException</m:type> 
    <m:stacktrace>at queryable_reader(Object) at System.Data.Services.Providers.ReflectionServiceProvider.GetQueryRootForResourceSet(ResourceSet container) at System.Data.Services.Providers.ReflectionDataServiceProvider.GetQueryRootForResourceSet(ResourceSet resourceSet) at System.Data.Services.Providers.DataServiceProviderWrapper.GetQueryRootForResourceSet(ResourceSetWrapper resourceSet) at System.Data.Services.RequestUriProcessor.ComposeExpressionForEntitySet(SegmentInfo segment, IDataService service, Boolean isLastSegment, Boolean checkRights) at System.Data.Services.RequestUriProcessor.ComposeExpressionForSegments(IList`1 segments, IDataService service, Boolean isCrossReferencingUri) at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery) at System.Data.Services.DataService`1.ProcessIncomingRequestUri() at System.Data.Services.DataService`1.HandleRequest()</m:stacktrace> 
    </m:innererror> 
</m:error> 

मैं इसे कैसे हल करूं?

धन्यवाद,

उत्तर

33

EF6 साथ WCF DataService का उपयोग करने के लिए, करने के लिए कुछ अतिरिक्त काम कर रहे हैं। कृपया विस्तार के लिए निम्नलिखित दो ब्लॉग पोस्ट की जाँच करें:

Using WCF Data Services 5.6.0 with Entity Framework 6+

WCF Data Services Entity Framework Provider is updated with WCF Data Service 5.6.2

सामान्य में, आपको निम्न दो चरणों की आवश्यकता होगी:

  1. नवीनतम Nuget पैकेज Microsoft.OData.EntityFrameworkProvider स्थापित निम्नलिखित उस पृष्ठ पर गाइड;
  2. EntityFrameworkDataService साथ DataService बदलें, अपने WcfDataService1.svc में कहते हैं:

    सार्वजनिक वर्ग WcfDataService1: EntityFrameworkDataService

+1

धन्यवाद Karata। मुझे यह काम मिल गया। – user659469

+2

धन्यवाद। ओह क्यों माइक्रोसॉफ्ट अपने ट्यूटोरियल अपडेट नहीं करते हैं! – yonsk

+0

मुझे यह खोजने के लिए 6 घंटे लग गए। – Omzig

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